使用Angular Material datepicker自动格式化日期输入

时间:2018-05-02 22:12:26

标签: angular angular-material momentjs angular-material2

是否可以从角度材料中自动格式化日期选择器输入中的日期(时刻)?

我的用例是让用户在输入中键入日期“DDMMYYYY”,如果它是“fr-FR”语言环境的有效日期,则格式与直接使用日历时的格式相同,因此“DD” / MM / YYYY”。例如:03052018> 2018年3月5日

我想为我的应用程序的所有日期选择器执行此操作,因此我想知道是否可以通过扩展MomentDateAdapter或类似的东西来实现它?实际上,我使用(dateChange)事件手动完成并将const formatedValue = moment(value, 'DDMMYYYY', 'fr-FR');绑定到输入

提前致谢!

ps:Datepicker from angular material documentation

1 个答案:

答案 0 :(得分:0)

最后我使用了一个指令:

import { Directive, ElementRef, HostListener } from '@angular/core';
import * as moment from 'moment';

@Directive({
  selector: '[appFormatDate]'
})
export class FormatDateDirective {
  constructor(private el: ElementRef) {}

  @HostListener('blur')
  onBlur() {
    const inputValue = this.el.nativeElement.value;
    console.log(inputValue);

    if (inputValue !== '') {
      this.formatDate(inputValue);
    }
  }

  formatDate(value: string) {
    const momentDate = moment(value, ['DDMMYYYY', 'D MMMM YYYY'], 'fr-FR'); // Ex : [01012018, 1 janvier 2018]
    const formatedValue = momentDate.isValid() ? momentDate.format('DD/MM/YYYY') : value;
    console.log(formatedValue);
    this.el.nativeElement.value = formatedValue;
  }
}