将utc+0与"角材质8"中的MAT_DATE_LOCALE一起使用



我使用的是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",
},
}
}]

是啊!我希望这能帮助其他人!

最新更新