Причина в том, что компонент выбора даты, кажется, анализирует входную строку, передавая ее стандартному конструктору 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);
}
}