当我遇到这种奇怪的行为时,我正在玩 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 天。
这段代码有什么问题?
编辑:我更改了变量名称以使其更清晰。
当我遇到这种奇怪的行为时,我正在玩 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 天。
这段代码有什么问题?
编辑:我更改了变量名称以使其更清晰。
JavaScript 的月份是从零开始的。
天和年是基于一个的。
去搞清楚。
更新
之所以如此,从JavaScript的创造者来说,是
JS 不得不“看起来像 Java”,只是不那么像 Java 的愚蠢弟弟或男孩人质伙伴。另外,我必须在十天内完成,否则会发生比 JS 更糟糕的事情。
http://www.jwz.org/blog/2010/10/every-day-i-learn-something-new-and-stupid/#comment-1021
正如埃里克所说,这是因为月份被列为 0-11 范围。
这是一种常见的行为 - 来自 localtime() 的 Perl 结果也是如此,可能还有许多其他语言。
这可能最初是从 Unix 的 localtime() 调用继承的。(做“本地人”)
原因是天/年是它们自己的整数,而月(作为#)是数组的索引,在大多数语言中——尤其是在 Unix 上实现底层调用的 C——从 0 开始。
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)