如何更改 angular material 日期选择器格式
How to change angular material datepicker format
这是我在使用 angular material 日期选择器时得到的日期格式....Wed Nov 21 2018 00:00:00 GMT+0530 (India Standard Time)
但我需要 (YYYY-MM-DD)
或 (YYYY-MM-DDTHH:mm)
这种格式的日期。
这是模型 class 我用来从 angular material 表单
捕获数据
export class FlightSchedule {
constructor(
public destination: string,
public origin: string,
public date: string,
public limit: string
) {}
}
请帮助我,我无法将日期转换为 YYYY-MM-DD
或 YYYY-MM-DDTHH:mm
格式。
我是 Angular
的新手
提前致谢
您需要提供一个包含您希望使用的格式的对象。该对象应该类似于:
export const MY_FORMATS = {
parse: {
dateInput: 'LL',
},
display: {
dateInput: 'YYYY-MM-DD',
monthYearLabel: 'YYYY',
dateA11yLabel: 'LL',
monthYearA11yLabel: 'YYYY',
},
};
然后您需要将其添加到您的提供者数组中,如下所示:
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},
],
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 中添加以上代码。它非常适合我。
不需要使用MomentDateAdapter
!
这是我使用 MAT_NATIVE_DATE_FORMATS
.
代码量最少 和 的解决方案
- 声明您自己的日期格式
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,
}
};
- 使用它们
@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);
就这些!
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>
一种快捷方式是创建 javascript 日期对象,然后将其格式化为您想要的任何格式。假设你的日期输入有 [(ngModel)]="myDate",你可以这样做:
var formatedDate = new Date(this.myDate).toLocaleString();
这是做你想做的事的捷径:)
这是我在使用 angular material 日期选择器时得到的日期格式....Wed Nov 21 2018 00:00:00 GMT+0530 (India Standard Time)
但我需要 (YYYY-MM-DD)
或 (YYYY-MM-DDTHH:mm)
这种格式的日期。
这是模型 class 我用来从 angular material 表单
捕获数据export class FlightSchedule {
constructor(
public destination: string,
public origin: string,
public date: string,
public limit: string
) {}
}
请帮助我,我无法将日期转换为 YYYY-MM-DD
或 YYYY-MM-DDTHH:mm
格式。
我是 Angular
的新手提前致谢
您需要提供一个包含您希望使用的格式的对象。该对象应该类似于:
export const MY_FORMATS = {
parse: {
dateInput: 'LL',
},
display: {
dateInput: 'YYYY-MM-DD',
monthYearLabel: 'YYYY',
dateA11yLabel: 'LL',
monthYearA11yLabel: 'YYYY',
},
};
然后您需要将其添加到您的提供者数组中,如下所示:
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},
],
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 中添加以上代码。它非常适合我。
不需要使用MomentDateAdapter
!
这是我使用 MAT_NATIVE_DATE_FORMATS
.
- 声明您自己的日期格式
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,
}
};
- 使用它们
@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);
就这些!
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>
一种快捷方式是创建 javascript 日期对象,然后将其格式化为您想要的任何格式。假设你的日期输入有 [(ngModel)]="myDate",你可以这样做:
var formatedDate = new Date(this.myDate).toLocaleString();
这是做你想做的事的捷径:)