angular - 如何在 Angular 6 的 Material 日期选择器中编辑日期格式?

标签 angular angular-material angular6

我正在为我的 Angular 6 项目使用 Material 日期选择器。默认情况下, Material 日期选择器的日期格式是 dd-mm-yyyy。但是我需要 yyyy-mm-dd ..我该怎么做。这是我的代码

<mat-form-field style="margin-right: 25px;">
    <input matInput [matDatepicker]="picker_start" placeholder="2018-08-31" [(ngModel)]="startdate" >
    <mat-datepicker-toggle matSuffix [for]="picker_start"></mat-datepicker-toggle>
    <mat-datepicker #picker_start></mat-datepicker>
</mat-form-field>

最佳答案

你可以编写一个简单的dateAdapter:

    import { NativeDateAdapter, DateAdapter, MAT_DATE_FORMATS, MatDateFormats } from "@angular/material";


export class AppDateAdapter extends NativeDateAdapter {

    parse(value: any): Date | null {
        if ((typeof value === 'string') && (value.indexOf('/') > -1)) {
          const str = value.split('/');
          const year = Number(str[2]);
          const month = Number(str[1]) - 1;
          const date = Number(str[0]);
          return new Date(year, month, date);
        }
        const timestamp = typeof value === 'number' ? value : Date.parse(value);
        return isNaN(timestamp) ? null : new Date(timestamp);
      }
   format(date: Date, displayFormat: string): string {
       if (displayFormat == "input") {
          let day = date.getDate();
          let month = date.getMonth() + 1;
          let year = date.getFullYear();
          return   year + '-' + this._to2digit(month) + '-' + this._to2digit(day)   ;
       } else if (displayFormat == "inputMonth") {
          let month = date.getMonth() + 1;
          let year = date.getFullYear();
          return  year + '-' + this._to2digit(month);
       } else {
           return date.toDateString();
       }
   }

   private _to2digit(n: number) {
       return ('00' + n).slice(-2);
   } 
}

export const APP_DATE_FORMATS =
{
   parse: {
       dateInput: {month: 'short', year: 'numeric', day: 'numeric'}
   },
   display: {
       dateInput: 'input',
       monthYearLabel: 'inputMonth',
       dateA11yLabel: {year: 'numeric', month: 'long', day: 'numeric'},
       monthYearA11yLabel: {year: 'numeric', month: 'long'},
   }
}

DEMO

关于angular - 如何在 Angular 6 的 Material 日期选择器中编辑日期格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52422828/

相关文章:

angular - 模板解析错误 : There is no directive with "exportAs" set to "cdkDropList"

javascript - Angular 6 组件对其他组件的 setTimeout 使用react

typescript - 具有最后一个值的 Angular2 EventEmitter

angular - 如何在 Angular 5 中路由到外部链接

typescript - Angular 2 导入语句通配符语法

css - mat-checkbox 自定义颜色无法更改

angular - MatDialogRef .afterClosed Observable

angular - 自定义 ValidatorFn - Angular 6

angular - 空注入(inject)器错误 : No provider for AnimationBuilder in Angular 6

javascript - 使用 angular2 从服务更新组件中的变量更改