【发布时间】:2019-10-04 15:58:30
【问题描述】:
在基本日期选择器上,如果我手动输入年份(2019 年)并跳出,为什么日期默认为 2018 年 12 月 31 日?
https://material.angular.io/components/datepicker/overview
我们如何改变这种行为?
【问题讨论】:
标签: angular datepicker angular-material
在基本日期选择器上,如果我手动输入年份(2019 年)并跳出,为什么日期默认为 2018 年 12 月 31 日?
https://material.angular.io/components/datepicker/overview
我们如何改变这种行为?
【问题讨论】:
标签: angular datepicker angular-material
原因是日期选择器组件似乎通过将输入字符串传递给标准 Date() 构造函数来解析输入字符串,这在某些情况下可能会给出不一致的结果,有关详细信息,请参阅此 SO 帖子: Why does Date.parse give incorrect results?
您可能处于 UTC 偏移量为负的时区,因此 new Date("2019") 会为您提供类似 Mon Dec 31 2018 19:00:00 GMT-0500 (Eastern Standard Time) 的信息
在这种特殊情况下(四位数字字符串),您可以通过手动将字符串转换为 Date 来解决此问题,如下所示:new Date(year, 0) 在 onChange 事件处理程序中,但请记住,可能还有其他奇怪的情况,例如这样例如:2019-01-01 -> 12/31/2018
component.html
<input [(ngModel)]="date" matInput #datepickerInput [matDatepicker]="picker" (dateChange)="onDateChange()">
组件.ts
@ViewChild("datepickerInput", {static: false}) datepickerInput: ElementRef;
private date: Date = null;
private onDateChange() {
if (this.datepickerInput.nativeElement.value.match(/^\s*\d{4}\s*$/)) {
this.date = new Date(this.datepickerInput.nativeElement.value, 0);
}
}
【讨论】: