Выбор даты коврика - PullRequest
       9

Выбор даты коврика

1 голос
/ 04 октября 2019

в базовом средстве выбора даты, если я вручную ввожу год (2019) и выкладываю вкладку, почему по умолчанию для даты выбрано 31.12.2008?

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

Какмы изменим это поведение?

1 Ответ

0 голосов
/ 06 октября 2019

Причина в том, что компонент выбора даты, кажется, анализирует входную строку, передавая ее стандартному конструктору Date (), который в некоторых случаях может давать противоречивые результаты, подробности см. В этом сообщении SO: Почему Date. синтаксический анализ дает неверные результаты?

Вы, вероятно, находитесь в часовом поясе с отрицательным смещением UTC, поэтому new Date("2019") дает вам что-то вроде Mon Dec 31 2018 19:00:00 GMT-0500 (Eastern Standard Time)

В данном конкретном случае (четырехзначное числоstring) вы можете исправить это поведение, вручную преобразовав строку в Date следующим образом: new Date(year, 0) в обработчике события onChange, но имейте в виду, что могут быть и другие странные случаи, например, например: 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);
    }
}
...