重要日期选择器始终会导致错误

时间:2018-06-28 08:54:58

标签: typescript datepicker angular-material

我无法将自定义日期格式应用于我的材料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() {
  }
}

2 个答案:

答案 0 :(得分:0)

也许您可以在构造函数上设置Locale。它对我有用

constructor(private adapter: DateAdapter<any>) {
    this.adapter.setLocale('es');
}

希望它有用:)

答案 1 :(得分:0)

我找不到适合该问题的解决方案。我消除该问题的方法是,仅隐藏日期选择器的输入字段,而是使用库存物料,然后对输入进行分割。虽然这不是一个干净的解决方案,但至少可以正常工作。