MY小提琴这里是Javascript getUTCMonth()在12月返回0?
月var exploded = "2011-12-25".split('-');
var d = new Date(exploded[0], exploded[1], exploded[2]);
document.write("year"+d.getUTCFullYear()+ " month"+d.getUTCMonth()+" day"+d.getUTCDate());
这是为什么返回0?
MY小提琴这里是Javascript getUTCMonth()在12月返回0?
月var exploded = "2011-12-25".split('-');
var d = new Date(exploded[0], exploded[1], exploded[2]);
document.write("year"+d.getUTCFullYear()+ " month"+d.getUTCMonth()+" day"+d.getUTCDate());
这是为什么返回0?
不,这是反过来:你正在定义日期,就好像它在1月份一样。
月 - 整数值代表月份,开头0 1月至11月进行。
您提供了12
,因此它被视为0
(1月)。
如果您需要证明,请参阅modified version of the script, showing the whole date and time。
十二月在日期对象中是11。你必须减去1才能使它索引0。
因为它指向正确的方向(作为@ Gabe的答案和我的),我会upvote你的答案,但我不会这样做,因为你引用的信息来源。有关详细说明和原因,请参阅[W3Fools.com](http://w3fools.com/)。 – Tadeck
它仍然是准确的:P – jzila
不,我不相信:)请参阅[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
你注意到它打印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
即返回year2011 month11 day24这是错误的:/ – Baconbeastnz
事实上,如果我修改它http://jsfiddle.net/3CpXz/,即使只是toString()失败 – Baconbeastnz
@Baconbeastnz这是因为'getUTCMonth '也是0-11。试试:'“月”+(d.getUTCMonth()+ 1)' –
谢谢!!! OMG我是一个障碍,也注意到它输出的第24条而不是第25条是因为时间戳是00:00? – Baconbeastnz
@Baconbeastnz:我相信这个特定的问题是由于以下原因:您创建的日期应该是当地时间,但是您正在输出UTC日期。请参阅[包括小时数的UTC和当地时间的详细结果](http://jsfiddle.net/3CpXz/12/)。它有帮助吗? – Tadeck
@Baconbeastnz:基本上你在东半球的某个地方,因为那个UTC时间实际上更早(如果你可以这么说的话)。 – Tadeck