Moment.JS弃用警告

时间:2017-10-16 10:52:17

标签: javascript date momentjs

我正在更新一个使用moment.js作为日期的旧系统。

目前,它使用此代码作为格式化手段;

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

我尝试将日期转换为使用toISOString,然后再将其传递给最终localTime。但是,我一直收到相同的警告。

警告

Deprecation warning: moment construction falls back to js Date.

以下是Twitter在XML文件中生成的日期格式。

<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.

为什么日期会回落到Date(),即使我将其记录到控制台时也会获得ISO格式。我哪里错了?

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

尝试{。{1}},其中this.created_at为var localTime = moment.utc(new Date(this.created_at)).toDate();