MdDatepickerModule - European format

前端 未结 2 2023
天涯浪人
天涯浪人 2020-12-20 04:12

I use MdDatePickerModule to pick dates but I have a problem: If I select August 5, everything is ok. But if I reopen the selection the month changes and becomes May, if I s

2条回答
  •  無奈伤痛
    2020-12-20 05:13

    The correct way of doing it for now is to set the locale as well as having a custom adapter to parse the date properly.

    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) {
        this.locale = 'it';
        this.dateAdapter.setLocale('it');   
      }
    
    }
    

    Plunker demo

    This bug has been reported to Material team and being tracked by the following issue.

提交回复
热议问题