2011-12-01 20 views

回答

9

不,这是反过来:你正在定义日期,就好像它在1月份一样。

the documentation on Date()

- 整数值代表月份,开头0 1月至11月进行。

您提供了12,因此它被视为0(1月)。

如果您需要证明,请参阅modified version of the script, showing the whole date and time

+0

谢谢!!! OMG我是一个障碍,也注意到它输出的第24条而不是第25条是因为时间戳是00:00? – Baconbeastnz

+0

@Baconbeastnz:我相信这个特定的问题是由于以下原因:您创建的日期应该是当地时间,但是您正在输出UTC日期。请参阅[包括小时数的UTC和当地时间的详细结果](http://jsfiddle.net/3CpXz/12/)。它有帮助吗? – Tadeck

+0

@Baconbeastnz:基本上你在东半球的某个地方,因为那个UTC时间实际上更早(如果你可以这么说的话)。 – Tadeck

2

十二月在日期对象中是11。你必须减去1才能使它索引0。

http://www.w3schools.com/jsref/jsref_getutcmonth.asp

+2

因为它指向正确的方向(作为@ Gabe的答案和我的),我会upvote你的答案,但我不会这样做,因为你引用的信息来源。有关详细说明和原因,请参阅[W3Fools.com](http://w3fools.com/)。 – Tadeck

+0

它仍然是准确的:P – jzila

+0

不,我不相信:)请参阅[Date object docs](http://www.w3schools.com/jsref/jsref_obj_date.asp)和[JS Date对象教程](http: //www.w3schools.com/js/js_obj_date.asp) - **没有**他们实际上提到'new Date()'应该给出以月份开头的月份的月份(和'11' 12月)。链接你提供了只提供'getUTCMonth()'的正确值,而不是Date对象的构造函数。该链接甚至在其示例中具有'var month = new Array(12);',这不是一个好习惯。 W3Schools充满了不准确:( – Tadeck

7

你注意到它打印2012的一年?问题在于它使用基于0的月份,所以它认为今年的12月份实际上是明年的第0个月。换句话说,0是1月,11是12月,所以12月是明年1月。

您需要从人类可读月减1:

var d = new Date(exploded[0], exploded[1] - 1, exploded[2]); 

如果我改变计划,以这样的:

var exploded = "2011-12-25".split('-'); 
var d = new Date(exploded[0], exploded[1] - 1, exploded[2]); 
document.write(d.toString()); 

它打印:Sun Dec 25 00:00:00 EST 2011

+0

即返回year2011 month11 day24这是错误的:/ – Baconbeastnz

+0

事实上,如果我修改它http://jsfiddle.net/3CpXz/,即使只是toString()失败 – Baconbeastnz

+1

@Baconbeastnz这是因为'getUTCMonth '也是0-11。试试:'“月”+(d.getUTCMonth()+ 1)' –