日期显示在一天之后

时间:2014-10-27 18:25:11

标签: javascript date momentjs

我在使用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"

1 个答案:

答案 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.parseinterpret 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>