我正在更新一个使用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格式。我哪里错了?
答案 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();