javascript - 如何防止带有 Moment Js 的 Angular Material 6 DatePicker 转换不正确的格式?

标签 javascript angular datepicker angular-material momentjs

我将 Angular Material Datepicker 与 Momentjs 结合使用,这有助于我使用任何类型的分隔符来表示天、月和年(例如/、. 等)。

它在选择日期并添加正确或几乎正确的格式时非常有效,即:DD/MM/YYYY。

我已经包含在我的模块中:

export const MY_FORMATS = {
  parse: {
    dateInput: 'DD/MM/YYYY',
  },
  display: {
    dateInput: 'DD/MM/YYYY',
    monthYearLabel: 'MMMM YYYY',
    dateA11yLabel: 'MM/DD/YYYY',
    monthYearA11yLabel: 'MMMM YYYY',
  },
};

然后:

  providers: [
    {provide: DateAdapter, useClass: MomentDateAdapter, deps: [MAT_DATE_LOCALE]},
    {provide: MAT_DATE_FORMATS, useValue: MY_FORMATS},
  ],

当用户输入格式为 YYYY/MM/DD 的日期时会出现问题,它会自动转换为 DD/MM/YYYY,这不应该发生,因为它是不正确的。

如何防止这种情况发生,如何阻止 Momentjs 转换这种格式并保持输入无效?

最佳答案

Angular Material Datepicker 中没有任何配置可以更改该行为。但是您可以通过添加一个隐藏的输入字段并与日期选择器绑定(bind)来实现相同的目的。 这是我如何做到的示例。

HTML 文件中:

<mat-form-field>
<input matInput #autocomplete placeholder="Please choose a date">
<mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle>
<mat-datepicker #picker></mat-datepicker>

ts文件中:

toFormattedDate(iso: string) {
  const date = new Date(iso);
  console.log(date);
  return `${date.getDate()}/${date.getMonth() + 1}/${date.getFullYear()}`;
}

看看我的Stackblitz example .

关于javascript - 如何防止带有 Moment Js 的 Angular Material 6 DatePicker 转换不正确的格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56008827/

相关文章:

javascript - 当我从使用服务获取的数组中删除一个元素时,它在哪里被删除?

棱 Angular 分明。为什么调用 markForCheck() 结果查看更新

java - 如何在 Wicket 口中创建日期过滤列属性?

angularjs - Angular UI月选择器

javascript - jQuery Datepick (Keith Wood) 使用 CSS 类突出显示 defaultDate

javascript - 如何将 PHP 变量传递给 AngularJS 配置

javascript - 在 JavaScript 中设置代理

javascript - 需要使用 javascript 将所选文本设为粗体/斜体/下划线,或者需要非常基本的文本编辑器建议

javascript - 在 Backbone/Underscore 模板中使用 "if",怎么样?

javascript - 将对象插入对象数组 - Typescript