2

我正在使用 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 }
],

通过这种方式,我打算:

  • 使用 datePicker 的时刻;
  • 使日期选择器使用 utc+0;
  • 使用与文化相同的格式;

例如,带有“en-US”的 MAT_DATE_LOCALE:如果我选择 2020 年 4 月 10 日,我希望选择器显示“04/10/2020”(例如,“L”格式将设置为 MM/DD/YYYY ) 并发出“2020-04-10T00:00:00.000Z”

发生的情况是选择器发出“2020-04-09T23:00:00.000Z”。使用开发人员工具,发出的值是私有属性“_isUtc”设置为 false 的时刻。

我哪里错了?

4

1 回答 1

5

我发现了问题:我替换了这些:

 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",
        },
    }
}]

是的!我希望这可以帮助别人!

于 2020-04-14T11:21:13.237 回答