在基本日期选择器上,如果我手动输入年份(2019)并跳出,为什么日期默认设置为12/31/2018?
https://material.angular.io/components/datepicker/overview
我们如何改变这种行为?
答案 0 :(得分:0)
原因是日期选择器组件似乎通过将输入字符串传递给标准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)
的信息
在这种特殊情况下(四位数的字符串),您可以通过在onChange事件处理程序中将字符串手动转换为Date来解决此问题,例如:new Date(year, 0)
,但请记住,可能还有其他奇怪的情况,例如:2019-01-01-> 12/31/2018
component.html
<input [(ngModel)]="date" matInput #datepickerInput [matDatepicker]="picker" (dateChange)="onDateChange()">
component.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);
}
}