当我遇到这种奇怪的行为时,我正在玩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天。
此代码有什么问题?
编辑:我更改了变量名称以使其更清晰。
答案 0 :(得分:93)
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)