很奇怪:Javascript Date-Object神秘地添加月份?

Mac*_*cks 0 javascript time date

我猜我只是混淆了参数,但我已经检查了100次.

如果我这样做:

console.log(new Date(2012, 12, 14, 0, 26, 15, 0));
Run Code Online (Sandbox Code Playgroud)

我明白了:

Mon Jan 14 2013 00:26:15 GMT+0100 (CET)
Run Code Online (Sandbox Code Playgroud)

但我期待的是:

Fri Dec 14 2012 00:26:15 GMT+0100 (CET)
Run Code Online (Sandbox Code Playgroud)

为什么我得到这个结果?我以为Date-constructor的格式是year, month, day, hour, minute, second, millisecond.

有人知道我在这里缺少什么吗?

Mar*_*eed 5

Javascript月号从0开始.0 = 1月,11 = 12月.

所以你想要的是:

console.log(new Date(2012, 11, 14, 0, 26, 15, 0));
Run Code Online (Sandbox Code Playgroud)

是的,这是模糊的荒谬.其背后的逻辑是:您通常希望显示月份名称,获取它们的逻辑方法是将名称存储为按月份编号索引的数组.数组索引从0开始.因此,月份数应该是0.

数十年的程序员烦恼和惊喜,因为有人无法减去1,或浪费13指针数组的元素,或其他什么.

(这与工作日从0 =星期日到6 =星期六的数字背后的逻辑相同.这是因为它与ISO标准1 =星期一到7 =星期日的模数7相同.不同的欧洲/美国日历约定和基于1-vs-0的计数标准相互取消... :))