2017-10-16 132 views
-1

我正在更新使用moment.js作爲日期的舊系統。Moment.JS棄用警告

目前,它使用此代碼作爲格式化的手段;

var localTime = moment.utc(this.created_at).toDate(); 
localTime = moment(localTime).calendar(); 

我試圖把它傳遞給最終localTime之前的日期轉換爲使用toISOString。但是,我不斷收到相同的警告。


警告

Deprecation warning: moment construction falls back to js Date. 

下面是一個XML文件由Twitter產生的日期格式。

<created_at>Mon Oct 16 10:31:26 +0000 2017</created_at> 

在這裏,我試圖將其轉換爲ISO。

var isoString = moment.utc(this.created_at).toISOString(); 
localTime = moment(isoString, 'YYYY-MM-DDTHH:mm:ss.sss'); 

它記錄的時間

2017-10-16T10:31:26.000Z 

當我更新的精縮moment.js區域設置圖書館,我收到了類似的警告。

moment-with-locales.min.js:1 Deprecation warning: value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info. 

爲什麼即使當我把它登錄到控制檯我得到的ISO格式的日期回落至Date()。我哪裏錯了?

回答

3

由於您的輸入未採用ISO 8601識別格式,因此在RFC 2822格式中您都不得不使用moment(String, String)

這裏工作示例:

var created_at = 'Mon Oct 16 10:31:26 +0000 2017'; 
 
var localTime = moment.utc(created_at, 'ddd MMM DD HH:mm:ss ZZ YYYY'); 
 
localTime = localTime.calendar(); 
 
console.log(localTime);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>

+0

完美!這麼簡單,讓我自己感到捲土重來。下次肯定會記得!謝謝! –

0

嘗試var localTime = moment.utc(new Date(this.created_at)).toDate();其中this.created_at是Mon Oct 16 10:31:26 +0000 2017

+2

這是做什麼moment.js試圖說「不要這樣做」。 – RobG

+0

同意。 moment.js不鼓勵使用javascript的日期函數。這只是對文本解析的一種破解 – omarwaleed