Angular / MomentJS - 将formControlName绑定到md-datepicker

时间:2017-09-25 16:01:04

标签: angular momentjs

我正在使用

  • Moment.js
  • 火力地堡

我想要实现的目标

  • 从firebase返回日期时间戳时,我将其转换回有效/可读日期

  • 我的HTML输入字段(mdDatePicker)显示返回和转换的日期。

问题

  • 使用'formControlName'时,与我成功将其用于所有其他文本/复选框输入的方式相同,我收到以下错误:
  

错误错误:Datepicker:DateAdapter无法将值识别为日期对象

问题

  1. 如何获取我的返回值并让日期选择器显示它?
  2. HTML

     <input mdInput [mdDatepicker]="picker" (focus)="picker.open()" formControlName="album_date" required />
    <label class="vs__input__label">  Date </label>
    <md-datepicker #picker></md-datepicker>

    组件TS

    var timestamp = albumToDisplay.album_date;
    var albumDate = moment.unix(timestamp).format("MM/DD/YYYY");
           
    
    this.albumDetails = this.formBuilder.group({
      album_title: [albumToDisplay.album_title],
      album_date: [albumDate]
    });

    非常感谢任何帮助。

    更新

      

    错误错误:Datepicker:值必须是DateAdapter识别的日期对象或ISO 8601字符串。取而代之的是:1504784461

    知道怎么过这个吗?

2 个答案:

答案 0 :(得分:0)

Moment的format方法会返回一个字符串,因此不是您需要的字符串。似乎mdDatePicker在内部转换了日期,因此您甚至不需要片刻才能使用此功能。所有你需要做的:

this.albumDetails = this.formBuilder.group({
  album_title: [albumToDisplay.album_title],
  album_date: [albumToDisplay.album_date]
});

答案 1 :(得分:0)

所以经过一番摆弄后,这个有用了:

&#13;
&#13;
var albumTimeStamp = albumToDisplay.album_date;
var albumDateFormatted = moment.unix(albumTimeStamp).format("MM/DD/YYYY");
var albumDateISO = moment(albumDateFormatted).toISOString();
&#13;
&#13;
&#13;