在Angular Material 8中将utc + 0与MAT_DATE_LOCALE一起使用

时间:2020-04-10 17:01:42

标签: angular momentjs angular8 angular-material-8

我正在使用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”(例如,将设置为MM / DD / YYYY的“ L”格式)并发出“ 2020-04-10T00:00”: 00.000Z“

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

我在哪里错了?

1 个答案:

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

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