MdDatepickerModule - 欧洲格式

时间:2017-08-05 18:07:08

标签: angular datepicker angular-material2

我使用MdDatePickerModule来挑选日期,但我遇到了问题: 如果我选择8月5日,一切都好。但是,如果我重新打开选择,月份会变化并变为5月,如果我选择5月3日,我关闭,重新打开,则月份为3月。现在我知道问题是,在美国,与欧洲相比,月份和日期都是倒置的,但是" smart"解决冲突的方法。 感谢

2 个答案:

答案 0 :(得分:3)

现在正确的做法是设置语言环境以及使用自定义适配器来正确解析日期。

TS:

import {Component} from '@angular/core';
import { NativeDateAdapter, DateAdapter, MD_DATE_FORMATS } from "@angular/material";

export class ItalianDateAdapter extends NativeDateAdapter {
  parse(value: any): Date | null {
    if ((typeof value === 'string') && (value.indexOf('/') > -1)) {
      const str = value.split('/');
      if (str.length < 2 || isNaN(+str[0]) || isNaN(+str[1]) || isNaN(+str[2])) {
        return null;
      }
      return new Date(Number(str[2]), Number(str[1]) - 1, Number(str[0]), 12);
    }
    const timestamp = typeof value === 'number' ? value : Date.parse(value);
    return isNaN(timestamp) ? null : new Date(timestamp);
  }
}

@Component({
  selector: 'datepicker-overview-example',
  templateUrl: './datepicker-overview-example.html',
  styleUrls: ['./datepicker-overview-example.css'],
  providers: [{provide: DateAdapter, useClass: ItalianDateAdapter}],
})
export class DatepickerOverviewExample {

  locale: string;

  constructor(private dateAdapter: DateAdapter<Date>) {
    this.locale = 'it';
    this.dateAdapter.setLocale('it');   
  }

}

Plunker demo

此错误已报告给材料团队,并由以下issue跟踪。

答案 1 :(得分:2)

我正在努力解决类似的问题。在我的应用程序中,我想使用'en'和'pl'日期格式。我所做的只是在解析方法中添加第二个if()。所以我的适配器现在看起来像这样:

{% endif %}