我使用的是Angular 8和Angular Material 8。我的应用程序在AppModule中有以下代码:
{ provide: MAT_DATE_LOCALE, useFactory: "myFunctionToGetServerLanguageCode" }
其中myFunctionToGetServerLanguageCode是一个返回类似"en-US"(基于服务器(的字符串的方法。然后,我有了这个组件和Angular Material的日期选择器,这些特定的提供者:
providers: [
{ provide: DateAdapter, useClass: MomentDateAdapter, deps: [MAT_DATE_LOCALE] },
{ provide: MAT_MOMENT_DATE_ADAPTER_OPTIONS, useValue: { useUtc: true } },
{ provide: MAT_DATE_FORMATS, useValue: MAT_MOMENT_DATE_FORMATS }
],
以这种方式我打算:
- 将moment与datePicker一起使用
- 使日期选择器使用utc+0
- 使用与文化相同的格式
例如,对于带有"en-US"的MAT_DATE_LOCALE:如果我选择2020年4月10日,我希望选择器显示"04/10/2020"(例如,"L"格式将设置为MM/DD/YYYY(并发出"2020-04-10T00:0000Z">
此时拾取器会发出"2020-04-09T23:00:00.000Z"。使用开发人员工具,发出的值是私有属性"_isUtc"设置为false的Moment。
我哪里错了?
我发现了问题:我更换了这些:
providers: [
{ provide: DateAdapter, useClass: MomentDateAdapter, deps: [MAT_DATE_LOCALE] },
{ provide: MAT_MOMENT_DATE_ADAPTER_OPTIONS, useValue: { useUtc: true } },
{ provide: MAT_DATE_FORMATS, useValue: MAT_MOMENT_DATE_FORMATS }]
带有:
providers: [
{ provide: DateAdapter, useClass: MomentDateAdapter, deps: [MAT_DATE_LOCALE,
MAT_MOMENT_DATE_ADAPTER_OPTIONS] },
{ provide: MAT_MOMENT_DATE_ADAPTER_OPTIONS, useValue: { useUtc: true } },
{
provide: MAT_DATE_FORMATS, useValue: {
parse: {
dateInput: "L",
},
display: {
dateInput: "L",
monthYearLabel: "MMM YYYY",
dateA11yLabel: "LL",
monthYearA11yLabel: "MMMM YYYY",
},
}
}]
是啊!我希望这能帮助其他人!