自定义的mat-datepicker存在问题。该日期以不正确的格式加载到前端,应读取为“ MM / DD / YYYY”
例如1993年4月1日如下:'29 / 19 / 93__' 数据正以ISO格式进入前端,我们要以“ MM / DD / YYYY”格式显示
该转换不适用于已加载的输入数据,但是,单击输入文本框后,日期将以正确的格式显示
在加载时使用错误的日期格式: https://imgur.com/a/XiRyMdt
在输入文本框中单击后 https://imgur.com/a/gj9D6sG
我们尝试查看当dateValue创建时以及文本框中发生点击事件时发生的更改事件
HTML
<input (dateChange)="inputEvent($event, 'text')" matInput [matDatepicker]="picker"
[value]="dateValue"
[min]="minDate"
[max]="maxDate"
[style.width]="inputWidth"
class="form-control"
[textMask]="{mask:dateInputMask}"
[placeholder]="placeholder">
TS
dateInputMask = [/\d/, /\d/, '/', /\d/, /\d/, '/', /\d/, /\d/, /\d/, /\d/];
inputEvent(event: any, source: string) {
// if full date entered convert to moment and set dateValue to moment
this.dateValue = event.target.value;
if (this.dateValue !== null && !this.dateValue.isValid()) {
this.dateValue = null;
}
}
writeValue(value: any) {
if (value === null) {
this.dateValue = null;
return;
}
if (value !== undefined) {
this.dateValue = moment(value, this.inFormat);
if (this.dateValue == null) {
this.dateValue = moment(value, this.format);
}
}
}
答案 0 :(得分:1)
datepicker构建为与日期实现无关。这意味着可以使其与多种不同的日期实现一起使用。但是,这也意味着开发人员需要确保为datepicker提供适当的组件,以便与他们选择的实现一起使用。
...
MAT_DATE_FORMATS对象只是日期选择器在分析和显示日期时使用的格式的集合。这些格式会传递给DateAdapter,因此您需要确保所使用的格式对象与应用程序中使用的DateAdapter兼容。
...
参考:Choosing a date implementation and date format settings
其他资源: