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

时间:2009-10-02 03:25:25

标签: 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 );

剩下的日子已经过了30天。

此代码有什么问题?

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

3 个答案:

答案 0 :(得分:93)

JavaScript的月份为零。

日和年是一个基础。

去图。

<强>更新

原因是creator of JavaScript

  

JS不得不“看起来像Java”,这是Java的愚蠢小子弟或男孩人质伙伴。另外,我必须在十天内完成或者比JS更糟糕的事情。

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

答案 1 :(得分:7)

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

这是一种常见的行为 - 来自localtime()和其他许多语言的Perl结果也是如此。

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

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

答案 2 :(得分:-2)

date1 = new Date();
//year, month, day [, hrs] [, min] [, sec]
date1 = new Date.UTC(date1.getFullYear(),date1.getMonth()+1,date1.getDate(),date1.getHours(),date1.getMinutes(),date1.getSeconds());

date2 = new Date();
date2 = date2.getTime();

alert(date1)
alert(date2)