我正在使用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 }
],
我打算这样:
例如,对于带有“ en-US”的MAT_DATE_LOCALE: 如果我选择2020年4月10日,我希望选择器显示“ 04/10/2020”(例如,将设置为MM / DD / YYYY的“ L”格式)并发出“ 2020-04-10T00:00”: 00.000Z“
发生的情况是,选择器发出了“ 2020-04-09T23:00:00.000Z”。 使用开发人员工具,发出的值为Moment,其私有属性“ _isUtc”设置为false。
我在哪里错了?
答案 0 :(得分:0)
我发现了问题: 我替换了这些:
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",
},
}
}]
是的! 我希望这可以帮助其他人!