Angular MdDatepickerModule-欧洲格式

Angular MdDatepickerModule-欧洲格式,angular,datepicker,angular-material2,Angular,Datepicker,Angular Material2,我使用MdDatePickerModule来选择日期,但我有一个问题: 如果我选择8月5日,一切都好。但是,如果我重新打开选择,月份会发生变化,变为5月,如果我选择5月3日,我会关闭,重新打开,月份是3月。现在我知道问题是,在美国,与欧洲相比,月和日是颠倒的,但解决冲突的“聪明”方式是什么。 谢谢,现在正确的做法是设置区域设置,并使用自定义适配器正确解析日期 ts: 从'@angular/core'导入{Component}; 从“@angular/material”导入{NativeDateA

我使用MdDatePickerModule来选择日期,但我有一个问题: 如果我选择8月5日,一切都好。但是,如果我重新打开选择,月份会发生变化,变为5月,如果我选择5月3日,我会关闭,重新打开,月份是3月。现在我知道问题是,在美国,与欧洲相比,月和日是颠倒的,但解决冲突的“聪明”方式是什么。
谢谢,现在正确的做法是设置区域设置,并使用自定义适配器正确解析日期

ts:

从'@angular/core'导入{Component};
从“@angular/material”导入{NativeDateAdapter,DateAdapter,MD_DATE_FORMATS};
导出类DateAdapter扩展NativeDateAdapter{
解析(值:任意):日期|空{
if((typeof value==='string')&&(value.indexOf('/')>-1)){
const str=value.split('/');
如果(str.length<2 | | isNaN(+str[0])| | isNaN(+str[1])| | isNaN(+str[2])){
返回null;
}
返回新日期(编号(str[2]),编号(str[1])-1,编号(str[0]),12);
}
constamp timestamp=typeof value=='number'?值:Date.parse(值);
返回isNaN(时间戳)?空:新日期(时间戳);
}
}
@组成部分({
选择器:“日期选择器概述示例”,
templateUrl:'./datepicker overview example.html',
样式URL:['./datepicker概述示例.css'],
提供程序:[{提供:DateAdapter,useClass:DateAdapter}],
})
导出类DatePickerOverview示例{
语言环境:字符串;
构造函数(专用日期适配器:日期适配器){
this.locale='it';
this.dateAdapter.setLocale('it');
}
}


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

我也遇到过类似的问题。在我的应用程序中,我想同时使用“en”和“pl”日期格式。我所做的只是在parse方法中添加第二个if()。因此,我的适配器现在如下所示:

export class MyDateAdapter extends NativeDateAdapter {


  // change first day of the week to Monday(1)
  getFirstDayOfWeek(): number {
    return 1;
  }

  parse(value: any): Date | null {

    // english format
    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[0]) - 1, Number(str[1]), 12);
    }

    // polish format
    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);
  }

 }
导出类MyDateAdapter扩展了NativeDateAdapter{
//将一周的第一天更改为星期一(1)
getFirstDayOfWeek():编号{
返回1;
}
解析(值:任意):日期|空{
//英文格式
if((typeof value==='string')&&(value.indexOf('/')>-1)){
const str=value.split('/');
如果(str.length<2 | | isNaN(+str[0])| | isNaN(+str[1])| | isNaN(+str[2])){
返回null;
}
返回新日期(编号(str[2]),编号(str[0])-1,编号(str[1]),12);
}
//波兰格式
if((typeof value==='string')&&(value.indexOf('.')>-1)){
const str=value.split('.');
如果(str.length<2 | | isNaN(+str[0])| | isNaN(+str[1])| | isNaN(+str[2])){
返回null;
}
返回新日期(编号(str[2]),编号(str[1])-1,编号(str[0]),12);
}
constamp timestamp=typeof value=='number'?值:Date.parse(值);
返回isNaN(时间戳)?空:新日期(时间戳);
}
}

谢谢你的回答,(尝试了“en gb”和“it”),但我的代码和你的插件都有同样的问题。你能帮插件分叉,重新创建问题并共享链接吗?我和你的插件也有同样的问题。如果我选择12日以下的一天,在下次重新打开日期选择时,月份会根据所选日期发生变化:我选择今天8月5日,我再次选择,月份为2017年5月,我选择5月4日,再次打开以选择另一个日期,月份为2017年4月,依此类推。如果我选择13个月或更长的时间,那就回到8月份。我是意大利人,这里是dd/mm/yyyy。我不会把逗号改成你的掠夺物,我总是有同样的问题。哦,我现在明白了。我正在努力,谢谢@AntoninoMirabile,尝试更新的答案。我很抱歉在发布之前没有验证之前的答案。
export class MyDateAdapter extends NativeDateAdapter {


  // change first day of the week to Monday(1)
  getFirstDayOfWeek(): number {
    return 1;
  }

  parse(value: any): Date | null {

    // english format
    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[0]) - 1, Number(str[1]), 12);
    }

    // polish format
    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);
  }

 }