【问题标题】:mat date picker entering year垫日期选择器输入年份
【发布时间】:2019-10-04 15:58:30
【问题描述】:

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

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

我们如何改变这种行为?

【问题讨论】:

    标签: angular datepicker angular-material


    【解决方案1】:

    原因是日期选择器组件似乎通过将输入字符串传递给标准 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);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-07
      • 1970-01-01
      • 1970-01-01
      • 2015-06-07
      • 1970-01-01
      • 2015-03-10
      • 2018-09-04
      • 1970-01-01
      相关资源
      最近更新 更多