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

IT技术 javascript datetime
2021-01-16 15:19:51

当我遇到这种奇怪的行为时,我正在玩 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个回答

JavaScript 的月份是从零开始的。

天和年是基于一个的。

去搞清楚。

更新

之所以如此,从JavaScript创造者来说,是

JS 不得不“看起来像 Java”,只是不那么像 Java 的愚蠢弟弟或男孩人质伙伴。另外,我必须在十天内完成,否则会发生比 JS 更糟糕的事情。

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

bruh 我花了 2 个小时在这个
2021-03-31 15:19:51
不错的报价,但 Eich 在那里谈论整数。这是来自同一来源的关于 Date 的部分:“我只对 jsdate.c 有帮助,来自 Netscape 的 Ken Smith(根据我们过于乐观的协议,他克隆了 java.util.Date —— Y2K 错误等等!小鹅……)”
2021-04-04 15:19:51

正如埃里克所说,这是因为月份被列为 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)
我不确定你在这里提出什么观点,并且代码没有运行 ( TypeError: function UTC() { [native code] } is not a constructor )。
2021-03-29 15:19:51