【问题标题】:How to change angular material datepicker format如何更改角度材料日期选择器格式
【发布时间】:2022-02-02 17:00:37
【问题描述】:

这是我在使用角度材料日期选择器时得到的日期格式....Wed Nov 21 2018 00:00:00 GMT+0530 (India Standard Time)

但我需要(YYYY-MM-DD)(YYYY-MM-DDTHH:mm) 这种格式的日期。

这是我用来从角度材料形式捕获数据的模型类

export class FlightSchedule {

    constructor(
        public destination: string,
        public origin: string,
        public date: string,
        public limit: string
    ) {}

}

请帮助我,我无法将日期转换为 YYYY-MM-DDYYYY-MM-DDTHH:mm 格式。

我是 Angular 的新手

提前致谢

【问题讨论】:

  • 您正在寻找转换从datepicker 收到的日期或在datepicker 输入中格式化日期?
  • 我希望转换从 datepicker 收到的日期

标签: angular typescript date angular-material2


【解决方案1】:

您需要提供一个包含您希望使用的格式的对象。该对象应类似于:

export const MY_FORMATS = {
  parse: {
    dateInput: 'LL',
  },
  display: {
    dateInput: 'YYYY-MM-DD',
    monthYearLabel: 'YYYY',
    dateA11yLabel: 'LL',
    monthYearA11yLabel: 'YYYY',
  },
};

然后您需要将其添加到您的 providers 数组中,如下所示:

  import { MAT_DATE_FORMATS } from '@angular/material';
  import { MomentDateAdapter } from '@angular/material-moment-adapter';

  //...

  providers: [
    {provide: DateAdapter, useClass: MomentDateAdapter, deps: [MAT_DATE_LOCALE]},
    {provide: MAT_DATE_FORMATS, useValue: MY_FORMATS},
  ],

Here is a StackBlitz demo to show it working

【讨论】:

  • 谢谢 user184994,但我无法在我的项目中自定义它。这是我的 html datepicker 格式,我现在附上它
  • -toggle>
  • 为什么不能自定义?
  • 我相信我有 class="form-control" 但在示例中它是 [formControl]="date",所以我无法使用 date = new FormControl(moment());在应用组件中
  • 您无法在此解决方案中手动更改日期。它的行为是有线的
【解决方案2】:

无需使用MomentDateAdapter

这是我使用MAT_NATIVE_DATE_FORMATS 的代码最少的解决方案

  1. 声明您自己的日期格式
import { MatDateFormats, MAT_NATIVE_DATE_FORMATS } from '@angular/material';

export const GRI_DATE_FORMATS: MatDateFormats = {
  ...MAT_NATIVE_DATE_FORMATS,
  display: {
    ...MAT_NATIVE_DATE_FORMATS.display,
    dateInput: {
      year: 'numeric',
      month: 'short',
      day: 'numeric',
    } as Intl.DateTimeFormatOptions,
  }
};
  1. 使用它们
@Component({
  selector: 'app-vacation-wizard',
  templateUrl: './vacation-wizard.component.html',
  styleUrls: ['./vacation-wizard.component.scss'],
  providers: [
    { provide: MAT_DATE_FORMATS, useValue: GRI_DATE_FORMATS },
  ]
})

别忘了设置合适的语言!

constructor(private readonly adapter: DateAdapter<Date>) {}
this.adapter.setLocale(this.translate.currentLang);

就是这样!

【讨论】:

【解决方案3】:
import { DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE } from '@angular/material';
import { MomentDateModule, MomentDateAdapter } from '@angular/material-moment-adapter';

 export const DateFormats = {
            parse: {
                dateInput: ['YYYY-MM-DD']
            },
            display: {
                dateInput: 'YYYY-MM-DD',
                monthYearLabel: 'MMM YYYY',
                dateA11yLabel: 'LL',
                monthYearA11yLabel: 'MMMM YYYY',
            },
        };

    providers: [

        { provide: DateAdapter, useClass: MomentDateAdapter, deps: [MAT_DATE_LOCALE] },
          { provide: MAT_DATE_FORMATS, useValue: DateFormats }

      ],

在您的 app.module 中添加上述代码。它非常适合我。

【讨论】:

  • @MSM 在运行时以任何方式解决此问题
  • 我怎样才能用这个像 2021-04-26T00:00:00 一样显示时间?
【解决方案4】:

一种快捷方式是创建 javascript 日期对象,然后将其格式化为您想要的任何格式。假设您的日期输入中有 [(ngModel)]="myDate" ,您可以这样做:

var formatedDate = new Date(this.myDate).toLocaleString();

这是做你想做的事的捷径:)

【讨论】:

    【解决方案5】:

      modelChanged(date) {
        var theDate = new Date(Date.parse(date));
        const localDate = theDate.toLocaleString().split(" ");
    
        console.log(localDate);
      }
        <!--I had the same issue and found it that with javascript was simple approach
    --->
        
        <mat-form-field class="example-full-width" appearance="fill">
              <mat-label>Choose a date</mat-label>
              <input
                matInput
                [matDatepicker]="picker"
                [(ngModel)]="date"
                (ngModelChange)="modelChanged($event)"
              />
              <mat-datepicker-toggle
                matSuffix
                [for]="picker"
              ></mat-datepicker-toggle>
              <mat-datepicker touchUi #picker color="primary"></mat-datepicker>
            </mat-form-field>

    【讨论】:

    • 请不要只发布代码作为答案,还要解释您的代码的作用以及它如何解决问题的问题。带有解释的答案通常更有帮助,质量更高,更有可能吸引投票。
    • 赞成,因为它可以工作,即使它没有解释,代码也很容易理解。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-02
    • 2019-12-04
    • 2019-03-04
    • 1970-01-01
    • 1970-01-01
    • 2020-12-22
    • 2018-09-13
    相关资源
    最近更新 更多