我已经将日期的区域设置为en-GB,以便数据报警器可以采用英国格式。
如果我手动输入日期10/12/2018 (2018年12月10日)并点击选项卡,日期将转换为12/10/2018 (2018年10月12日)。
使用选择器选择原始日期很好,只有手动输入和指定区域设置时才会出现此问题。
https://stackblitz.com/edit/angular-hv6jny
<mat-form-field>
<input matInput [matDatepicker]="picker" placeholder="Choose a date">
<mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle>
<mat-datepicker #picker></mat-datepicker>
</mat-form-field>--
providers: [
{ provide: MAT_DATE_LOCALE, useValue: 'en-GB' },
]这是数据报警器的窃听器吗?
发布于 2019-09-27 11:01:37
这不是窃听器。您需要构建这样的自定义日期适配器:
export class CustomDateAdapter extends NativeDateAdapter {
parse(value: any): Date | null {
if ((typeof value === 'string') && (value.indexOf('/') > -1)) {
const str = value.split('/');
const year = Number(str[2]);
const month = Number(str[1]) - 1;
const date = Number(str[0]);
return new Date(year, month, date);
}
const timestamp = typeof value === 'number' ? value : Date.parse(value);
return isNaN(timestamp) ? null : new Date(timestamp);
}
format(date: Date, displayFormat: Object): string {
date = new Date(Date.UTC(
date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(),
date.getMinutes(), date.getSeconds(), date.getMilliseconds()));
displayFormat = Object.assign({}, displayFormat, { timeZone: 'utc' });
const dtf = new Intl.DateTimeFormat(this.locale, displayFormat);
return dtf.format(date).replace(/[\u200e\u200f]/g, '');
}
}然后在你的应用中使用它:
@NgModule({
....
provide: DateAdapter, useClass: CustomDateAdapter }
})发布于 2020-05-20 11:18:18
要支持使用点而不是斜杠的其他区域设置,还可以使用矩日期适配器和格式。即时支持这一功能。
npm install moment @angular/material-moment-adapter --saveapp.module.ts
providers: [
{
provide: DateAdapter,
useClass: MomentDateAdapter,
deps: [MAT_DATE_LOCALE]
},
{
provide: MAT_DATE_FORMATS,
useValue: MAT_MOMENT_DATE_FORMATS
}
],https://stackoverflow.com/questions/52755818
复制相似问题