Javascript Date.UTC()函数已经关闭了一个月?

pic*_*rdo 50 javascript datetime

当我遇到这种奇怪的行为时,我正在玩Javascript创建一个简单的倒计时时钟:

var a = new Date(), 
now = a.getTime(),
then = Date.UTC(2009,10,31),
diff = then - now,
daysleft = parseInt(diff/(24*60*60*1000));
console.log(daysleft );
Run Code Online (Sandbox Code Playgroud)

剩下的日子是30天.

这段代码有什么问题?

编辑:我更改了变量名称以使其更清晰.

Eri*_* J. 97

JavaScript的月份为零.

日和年是一个基础.

去搞清楚.

UPDATE

这样的原因,来自JavaScript创建者,是

JS不得不"看起来像Java",不如Java,愚蠢的孩子兄弟或男孩 - 人质伙伴.另外,我必须在十天内完成或者比JS更糟糕的事情发生.

http://www.jwz.org/blog/2010/10/every-day-i-learn-something-new-and-stupid/#comment-1021

  • 哈.谢谢.这意味着我毕竟不会失去理智. (17认同)
  • 好的引用,但Eich在那里谈论整数.以下是关于Date的部分,来自同一个来源:*"我只得到jsdate.c的帮助,来自Netscape的Ken Smith(根据我们过于乐观的协议,克隆了java.util.Date - Y2K错误和所有!戈斯林......)"* (4认同)
  • 布鲁赫我花了2个小时在这上面 (4认同)

DVK*_*DVK 7

正如埃里克所说,这是因为几个月被列为0-11范围.

这是一种常见的行为 - 来自localtime()的Perl结果也是如此,可能还有许多其他语言.

这可能最初是从Unix的localtime()调用继承而来的.(做"当地人")

原因是几天/几年是他们自己的整数,而几个月(作为#)是数组的索引,在大多数语言中 - 尤其是在Unix上实现底层调用的C - 从0开始.