2017-10-16 216 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