I need help. I don't know how to change the date format of the material 2 datepicker. I've read documentation but I don't understand what I actually need to do. Output date format which datepicker provides by default is f.e.: 6/9/2017
What I'm trying to achieve is to change format to the 9-Jun-2017 or any other.
Documentation https://material.angular.io/components/component/datepicker doesn't help me at all. Thanks in advance
Double-click the date picker, text box, or expression box control whose data you want to format.
Here is the only solution I found for this one:
First, create const:
const MY_DATE_FORMATS = {    parse: {        dateInput: {month: 'short', year: 'numeric', day: 'numeric'}    },    display: {        // dateInput: { month: 'short', year: 'numeric', day: 'numeric' },        dateInput: 'input',        monthYearLabel: {year: 'numeric', month: 'short'},        dateA11yLabel: {year: 'numeric', month: 'long', day: 'numeric'},        monthYearA11yLabel: {year: 'numeric', month: 'long'},    } };   Then you have to extend NativeDateADapter:
export class MyDateAdapter extends NativeDateAdapter {    format(date: Date, displayFormat: Object): string {        if (displayFormat == "input") {            let day = date.getDate();            let month = date.getMonth() + 1;            let year = date.getFullYear();            return this._to2digit(day) + '/' + this._to2digit(month) + '/' + year;        } else {            return date.toDateString();        }    }     private _to2digit(n: number) {        return ('00' + n).slice(-2);    }  }   In format function, you can choose whatever format you want
And the last step, you have to add it into module providers:
providers: [     {provide: DateAdapter, useClass: MyDateAdapter},     {provide: MD_DATE_FORMATS, useValue: MY_DATE_FORMATS}, ],   And that's it. I can not believe that there is no some easy way to change date format through the @Input but let's hope it will be implemented in some future version of material 2 (currently beta 6).
Igor's answer didn't work for me so I asked directly on Angular 2 Material's github and someone gave me that answer which worked for me :
First write your own adapter :
import { NativeDateAdapter } from "@angular/material";   export class AppDateAdapter extends NativeDateAdapter {      format(date: Date, displayFormat: Object): string {          if (displayFormat === 'input') {              const day = date.getDate();             const month = date.getMonth() + 1;             const year = date.getFullYear();              return `${day}-${month}-${year}`;         }          return date.toDateString();     } }  Create your date format :
export const APP_DATE_FORMATS = {     parse: {         dateInput: { month: 'short', year: 'numeric', day: 'numeric' },     },     display: {         dateInput: 'input',         monthYearLabel: { year: 'numeric', month: 'numeric' },         dateA11yLabel: { year: 'numeric', month: 'long', day: 'numeric' },         monthYearA11yLabel: { year: 'numeric', month: 'long' },     } };  Provide those two to your module
providers: [         {             provide: DateAdapter, useClass: AppDateAdapter         },         {             provide: MAT_DATE_FORMATS, useValue: APP_DATE_FORMATS         }     ]  More infos here
EDIT: For those who are having the trouble of the manual input is being not respected with the format, you may override the parse(value: any) function from the NativeDateAdapter as follows.
parse(value: any): Date | null {     const date = moment(value, 'DD/MM/YYYY');     return date.isValid() ? date.toDate() : null; }   So, the custom adapter will take the final shape as follows.
import { NativeDateAdapter } from "@angular/material"; import * as moment from 'moment';  export class AppDateAdapter extends NativeDateAdapter {      format(date: Date, displayFormat: Object): string {         if (displayFormat === 'input') {              const day = date.getDate();             const month = date.getMonth() + 1;             const year = date.getFullYear();              return `${day}/${month}/${year}`;         }          return date.toDateString();     }      parse(value: any): Date | null {         const date = moment(value, environment.APP_DATE_FORMAT);         return date.isValid() ? date.toDate() : null;     } } 
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With