垫子日期选择器输入年份

时间:2019-10-04 15:58:30

标签: angular datepicker angular-material

在基本日期选择器上,如果我手动输入年份(2019)并跳出,为什么日期默认设置为12/31/2018?

https://material.angular.io/components/datepicker/overview

我们如何改变这种行为?

1 个答案:

答案 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);
    }
}