我无法将自定义日期格式应用于我的材料Datepicker。我也尝试过按照在 Material Datepicker
由于我认为这过于复杂并且无法正常工作( ERROR错误:Datepicker:值必须是DateAdapter可以识别的日期对象或ISO 8601字符串。而是得到了:1525125600000 )
我尝试使用this中的this stack answer参考实现。导致相同的错误。 显然是将日期转换为时间戳,因此格式化字符串似乎按预期方式应用。 我也想知道为什么执行angular会导致相同的错误(时间戳不同,因为它使用当前日期作为开始位置)。问题是,我完全不知道该再去哪里找错误了
这是我的.component.ts:
import {Component, Input, forwardRef} from '@angular/core';
import {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';
import {MatDatepickerInputEvent} from '@angular/material/datepicker';
import {default as _rollupMoment} from 'moment';
import * as _moment from 'moment';
const DATEMOMENT = _rollupMoment || _moment;
@Component({
selector: 'custom-date-picker',
templateUrl: 'app/components/datepicker/datepicker.component.html',
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => DatePickerComponent),
multi: true
}
]
})
export class DatePickerComponent implements ControlValueAccessor {
private tecDateValue: string = '28.05.1994';
@Input() public dateFormat: string = 'dd.MM.yyyy';
@Input() public placeholder: string;
@Input()
public get dateValue() {
return DATEMOMENT(this.tecDateValue, this.dateFormat);
}
public set dateValue(val) {
this.tecDateValue = DATEMOMENT(val).format(this.dateFormat);
this.propagateChange(this.tecDateValue);
}
public addEvent(type: string, event: MatDatepickerInputEvent<Date>) {
console.log(event.value);
this.dateValue = DATEMOMENT(event.value, this.dateFormat);
}
public writeValue(value: any) {
if (value !== undefined) {
this.dateValue = DATEMOMENT(value, this.dateFormat);
}
}
private propagateChange = (val: any) => {
};
public registerOnChange(fn: any) {
this.propagateChange = fn;
}
public registerOnTouched() {
}
}
答案 0 :(得分:0)
也许您可以在构造函数上设置Locale。它对我有用
constructor(private adapter: DateAdapter<any>) {
this.adapter.setLocale('es');
}
希望它有用:)
答案 1 :(得分:0)
我找不到适合该问题的解决方案。我消除该问题的方法是,仅隐藏日期选择器的输入字段,而是使用库存物料,然后对输入进行分割。虽然这不是一个干净的解决方案,但至少可以正常工作。