2014-10-27 64 views
1
每天

我遇到了同时使用Moment.js一些怪异的行为背后显示。我有一些助手类附加到日期原型,这显然是导致每个日期显示在一天后面。日期由

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('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

同样输出h:m:s,你可能会发现它们出了一定的小时数,这意味着它是一个时区问题。 – 2014-10-27 18:28:20

回答

1

你要告诉moment.js你来显示UTC日期:

moment(this).utc().format('MM/DD/YYYY') 

更多的文档中:http://momentjs.com/docs/#/parsing/utc/


但是,如果我实例化瞬间的对象直接与UTC字符串,那么它的工作原理:

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函数[...]生成的字符串解释为一个日期和时间;它会返回一个数字,即与日期和时间对应的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时间,而不是本地时间)。

+0

这工作,欢呼!谢谢。但是,当我用一个UTC字符串直接实例化一个Moment对象时,怎么会这样呢? – ncksllvn 2014-10-27 18:34:00

+0

增加了更多信息。 – 2014-10-27 18:38:54

+0

非常有帮助。非常感谢你!在计算机上给我留下了一些严重的空白注意。 – ncksllvn 2014-10-27 18:41:53