Ao selecionar uma data com o selecionador de data, tudo funciona bem, exibindo a data no formato desejado: DD/MM/YYYY
Mas ao inserir manualmente uma data com formato DD/MM/YYYY
, o selecionador de data altera automaticamente a data para MM/DD/YYYY
, detectando o primeiro valor DD
como um mês.
Como posso fazer com que a entrada manual seja detectada como DD/MM/YYYY
, não como MM/DD/YYYY
?
Obrigado!
<mat-form-field class="datepickerformfield" floatLabel="never">
<input matInput class="dp" formControlName="fpresentaciondesde" [matDatepicker]="picker5" placeholder="DD/MM/YYYY" required>
<mat-datepicker-toggle matSuffix [for]="picker5"></mat-datepicker-toggle>
<mat-datepicker #picker5></mat-datepicker>
</mat-form-field>
Você precisa construir um adaptador de data personalizado como este:
export class CustomDateAdapter 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: Object): string {
date = new Date(Date.UTC(
date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(),
date.getMinutes(), date.getSeconds(), date.getMilliseconds()));
displayFormat = Object.assign({}, displayFormat, { timeZone: 'utc' });
const dtf = new Intl.DateTimeFormat(this.locale, displayFormat);
return dtf.format(date).replace(/[\u200e\u200f]/g, '');
}
}
e, em seguida, use-o em seu aplicativo:
@NgModule({
....
providers: [
{ provide: DateAdapter, useClass: CustomDateAdapter }
]
})
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras