首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >角度材料-手动输入不正确地转换日期

角度材料-手动输入不正确地转换日期
EN

Stack Overflow用户
提问于 2018-10-11 08:41:47
回答 2查看 5.5K关注 0票数 11

我已经将日期的区域设置为en-GB,以便数据报警器可以采用英国格式。

如果我手动输入日期10/12/2018 (2018年12月10日)并点击选项卡,日期将转换为12/10/2018 (2018年10月12日)。

使用选择器选择原始日期很好,只有手动输入和指定区域设置时才会出现此问题。

https://stackblitz.com/edit/angular-hv6jny

代码语言:javascript
运行
复制
<mat-form-field>
  <input matInput [matDatepicker]="picker" placeholder="Choose a date">
  <mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle>
  <mat-datepicker #picker></mat-datepicker>
</mat-form-field>

--

代码语言:javascript
运行
复制
  providers: [
    { provide: MAT_DATE_LOCALE, useValue: 'en-GB' },
  ]

这是数据报警器的窃听器吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-27 11:01:37

这不是窃听器。您需要构建这样的自定义日期适配器:

代码语言:javascript
运行
复制
export class CustomDateAdapter extends NativeDateAdapter {

    parse(value: any): Date | null {

    if ((typeof value === 'string') && (value.indexOf('/') > -1)) {
       const str = value.split('/');

      const year = Number(str[2]);
      const month = Number(str[1]) - 1;
      const date = Number(str[0]);

      return new Date(year, month, date);
    }
    const timestamp = typeof value === 'number' ? value : Date.parse(value);
    return isNaN(timestamp) ? null : new Date(timestamp);
  }

  format(date: Date, displayFormat: Object): string {
    date = new Date(Date.UTC(
      date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(),
      date.getMinutes(), date.getSeconds(), date.getMilliseconds()));
    displayFormat = Object.assign({}, displayFormat, { timeZone: 'utc' });

    const dtf = new Intl.DateTimeFormat(this.locale, displayFormat);
    return dtf.format(date).replace(/[\u200e\u200f]/g, '');
  }

}

然后在你的应用中使用它:

代码语言:javascript
运行
复制
@NgModule({
    ....
    provide: DateAdapter, useClass: CustomDateAdapter }
})

演示

票数 10
EN

Stack Overflow用户

发布于 2020-05-20 11:18:18

要支持使用点而不是斜杠的其他区域设置,还可以使用矩日期适配器和格式。即时支持这一功能。

代码语言:javascript
运行
复制
npm install moment @angular/material-moment-adapter --save

app.module.ts

代码语言:javascript
运行
复制
  providers: [
    {
      provide: DateAdapter,
      useClass: MomentDateAdapter,
      deps: [MAT_DATE_LOCALE]
    },
    {
      provide: MAT_DATE_FORMATS,
      useValue: MAT_MOMENT_DATE_FORMATS
    }
  ],
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52755818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档