我在使用Moment.js时遇到了一些奇怪的行为。我有一些辅助类附加到Date原型,这显然导致每个日期显示在一天之后。
Date.prototype.format = function(){
return moment(this).format('MM/DD/YYYY')
}
var date = new Date('2008-05-13T00:00:00')
date.format() // => 05/12/2008, but should be 05/13/2008
我注意到的其他一些奇怪的事情:
date.getDate() // => yields 12, but should be 13
但是,如果我直接使用UTC字符串实例化Moment对象,那么它可以工作:
moment('2008-05-13T00:00:00').format('MM/DD/YY') // => 05/13/08
但是我正在处理普通日期对象,并且将每个日期修改为Moment对象并不是我最喜欢的想法。我已经尝试修改format
函数以从日期中提取UTC字符串,然后查看它是否正确显示,但无济于事。
date.toUTCString() // => Correctly yields "Tue, 13 May 2008 00:00:00 GMT"
moment(date.toUTCString()).format('MM/DD/YY') // => still 05/12/08
有什么想法在这里发生了什么?日期构造函数有问题吗?
编辑:输出时间:
moment(date).format('MM/DD/YY hh:mm:ss') // => "05/12/08 08:00:00"
答案 0 :(得分:1)
您必须告诉moment.js您要以UTC格式显示日期:
moment(this).utc().format('MM/DD/YYYY')
文档中的更多内容:http://momentjs.com/docs/#/parsing/utc/
但是,如果我直接使用UTC字符串实例化Moment对象,那么它可以工作:
moment('2008-05-13T00:00:00').format('MM/DD/YY') // => 05/13/08`
Moment.js interprets the argument as local time:
默认情况下,时刻会以当地时间进行分析和显示。
new Date()
(和Date.parse
)interpret the value as UTC time:
parse
函数[...]将结果字符串解释为日期和时间;它返回一个Number,即与日期和时间对应的UTC时间值。
我已经尝试修改格式功能,从日期中提取UTC字符串,然后查看它是否正确显示,但无济于事。
date.toUTCString() // => Correctly yields "Tue, 13 May 2008 00:00:00 GMT" moment(date.toUTCString()).format('MM/DD/YY') // => still 05/12/08`
date.toUTCString()
产生的格式不在formats that moment.js supports中,因此它回退到使用new Date()
(将字符串解释为UTC时间,而不是本地时间)。 / p>