Angular 角度材质日期选择器输入将日期视为US格式

Angular 角度材质日期选择器输入将日期视为US格式,angular,angular-material,Angular,Angular Material,在输入字段中填充日期时(不是通过日期选择器本身),日期被视为US格式。 例如,在输入字段中键入-10/01/2019后,它变为1/10/2019,打开日期选择器时,日期为2019年10月1日 通过日期选择器选择日期时,没有问题,并且所选日期显示为dd/MM/yyyy如果您使用的是角度材质日期选择器,则可以覆盖默认为US的区域设置。 @NgModule({ providers: [ {provide: MAT_DATE_LOCALE, useValue: 'fr-FR'}, ],

在输入字段中填充日期时(不是通过日期选择器本身),日期被视为US格式。 例如,在输入字段中键入-10/01/2019后,它变为1/10/2019,打开日期选择器时,日期为2019年10月1日


通过日期选择器选择日期时,没有问题,并且所选日期显示为dd/MM/yyyy

如果您使用的是角度材质日期选择器,则可以覆盖默认为US的区域设置。
@NgModule({
  providers: [
    {provide: MAT_DATE_LOCALE, useValue: 'fr-FR'},
  ],
})
export class MyApp {}
请参阅此链接:

您需要将useValue设置为fr-fr或使用dd/MM/yyyy的其他语言环境

@NgModule({
  providers: [
    {provide: MAT_DATE_LOCALE, useValue: 'fr-FR'},
  ],
})
export class MyApp {}
更新 format函数中有一个“bug”-需要('0'+(date.getMonth()+1)).slice(-2)中有一个括号-

只需创建一个DateAdapter

import {NativeDateAdapter,DateAdapter} from '@angular/material';

export class MyDateAdapter extends NativeDateAdapter{
  parse(value: string) {
    let it=value.split('/');
    if (it.length==3)
    return new Date(+it[2],+it[1]-1,+it[0],12)
  }

  format(date: Date, displayFormat: Object) {
    return ('0'+date.getDate()).slice(-2)+'/'+
           ('0'+(date.getMonth()+1)).slice(-2)+'/'+date.getFullYear()
  }
}
然后用作提供者

@Component({
  selector: 'datepicker-formats-example',
  templateUrl: 'datepicker-formats-example.html',
  styleUrls: ['datepicker-formats-example.css'],
    providers: [
    {provide: DateAdapter, useClass: MyDateAdapter}
  ],

})
export class DatepickerFormatsExample {
  date = new FormControl(new Date(Date.now()));
}
看中


请在您的组件上包括一个使用datePipe的via。datePipe无法解决此问题。问题是,当将本地设置为en FR时,来自文本输入的输入被视为US。输入中的日期未转换,但当打开日期选择器时,日期为US(例如输入=2019年9月1日,日期选择器显示2019年9月1日)。在我的情况下,我只需删除“format()”函数,它就像一个符咒,谢谢!!:)Nicolas,如果您删除了“format()函数,请不要以dd/MM/yyyy格式显示日期。代码中有一个“bug”(刚刚更正),可能我有一些配置使它在没有此函数的情况下工作;),但感谢您的回复!!