JavaScript的Date.UTC()函数closures了一个月?
当我遇到这个奇怪的行为时,我正在用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天。
这段代码有什么问题?
编辑:我改变了variables名称,使其更清晰。
这个月对于JavaScript来说是从零开始的。
天和年是一个基础。
去搞清楚。
UPDATE
这是从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()调用inheritance的。 (做“当地时间”)
原因在于日/年是他们自己的整数,而月(作为#)是数组的索引,在大多数语言中 – 特别是在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)