Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 手动键入时,材料日期选择器无效_Angular_Angular Material - Fatal编程技术网

Angular 手动键入时,材料日期选择器无效

Angular 手动键入时,材料日期选择器无效,angular,angular-material,Angular,Angular Material,我有一个dd/MM/yyyy格式的mat日期选择器,通过在calandar中选择,它可以正常工作,但当我手动键入日期高于12的日期时(例如,2019年1月27日),它无效。 html: 有什么可以帮忙的吗?我添加了一个解析器: 添加名为date-format.ts的新ts文件: import { NativeDateAdapter } from '@angular/material'; import { MatDateFormats } from '@angular/material/core'

我有一个dd/MM/yyyy格式的mat日期选择器,通过在calandar中选择,它可以正常工作,但当我手动键入日期高于12的日期时(例如,2019年1月27日),它无效。 html:

有什么可以帮忙的吗?

我添加了一个解析器: 添加名为date-format.ts的新ts文件:

import { NativeDateAdapter } from '@angular/material';
import { MatDateFormats } from '@angular/material/core';
export class AppDateAdapter extends NativeDateAdapter {
       parse(value: any): Date | null {
        var dateParts = value.split("/");
        if (dateParts.length != 3)
            dateParts = value.split("-");
        if (dateParts.length != 3)
            return null;
        if (dateParts[2] >= 0 && dateParts[2] <= 50)
            dateParts[2] = '20' + dateParts[2];

        return new Date(dateParts[2], dateParts[1] - 1, +dateParts[0]);
    };
}

很可能是因为它采用的是美国格式,即月/日/年。因此,不能高于12月12日。请检查此链接以了解自定义日期格式,并按如下方式输入
{ provide: MAT_DATE_LOCALE, useValue: 'en-GB' },
import { NativeDateAdapter } from '@angular/material';
import { MatDateFormats } from '@angular/material/core';
export class AppDateAdapter extends NativeDateAdapter {
       parse(value: any): Date | null {
        var dateParts = value.split("/");
        if (dateParts.length != 3)
            dateParts = value.split("-");
        if (dateParts.length != 3)
            return null;
        if (dateParts[2] >= 0 && dateParts[2] <= 50)
            dateParts[2] = '20' + dateParts[2];

        return new Date(dateParts[2], dateParts[1] - 1, +dateParts[0]);
    };
}
import {DateAdapter, MAT_DATE_FORMATS} from '@angular/material/core';
import { AppDateAdapter, APP_DATE_FORMATS } from 'src/app/helpers/date-format';

@Component({
    selector: 'app-root',
    templateUrl: 'app.component.html',
    styleUrls: ['app.component.css'],
    providers: [{provide: DateAdapter, useClass: AppDateAdapter},
        {provide: MAT_DATE_FORMATS, useValue: APP_DATE_FORMATS}]
})