2017-09-25 27 views
1

我正在使用角/ MomentJS - 綁定formControlName到MD-日期選擇器

  • Moment.js
  • 火力地堡

我想什麼實現

  • 當返回從火力的時間的時間戳,我將其轉換回一個有效/可讀的日期

  • 對於我的HTML輸入框(mdDatePicker)顯示返回並轉換日期。

問題

  • 當使用 'formControlName',以同樣的方式我成功地用它來進行所有的其他文本/複選框輸入,我收到以下錯誤:

ERROR Error: Datepicker: value not recognized as a date object by DateAdapter

問題

  1. 如何獲取我的返回值並使日期選取器顯示它?

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] 
 
});

任何幫助將不勝感激。

UPDATE

ERROR Error: Datepicker: Value must be either a date object recognized by the DateAdapter or an ISO 8601 string. Instead got: 1504784461

任何想法如何讓過去呢?

+0

錯誤是告訴你,它無法識別你餵養它什麼一個日期對象,這可能意味着你的'moment.unix(timestamp).format(「MM/DD/YYYY」)'行將返回日期對象以外的東西(我的猜測是,在'格式化'之後它變成字符串) – ruedamanuel

回答

0

所以後有點擺弄這個作品:

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

0

Moment的format方法返回一個字符串,所以這不是你所需要的。它也似乎mdDatePicker內部轉換的日期,所以你甚至不需要時刻這個工作。所有你需要做的:

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

感謝您的回覆@everest。不幸的是我在這裏得到同樣的錯誤。如果我使用上面的代碼,或者使用標準文本輸入,它會帶回時間戳(使用代碼時)或格式化字符串(使用我的代碼時)。但是,試圖將它集成到'md-datepicker'中會產生相同的錯誤。 – MegaTron

+0

我還用一些'進度'添加了對我的問題的更新。 – MegaTron

+0

從它的外觀你只需要將你的Unix時間戳轉換爲JavaScript日期 – Everest