MdDatepickerModule - European format

前端 未结 2 2015
天涯浪人
天涯浪人 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:11

    I was struggling with similar problem. In my app I want to use both 'en' and 'pl' date formats. All I did was adding second if() in parse method. So my adapter looks like this now:

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

    Plunker demo

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

    0 讨论(0)
提交回复
热议问题