0

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

如果我这样做:

console.log(new Date(2012, 12, 14, 0, 26, 15, 0));

我得到:

Mon Jan 14 2013 00:26:15 GMT+0100 (CET)

但我期待的是:

Fri Dec 14 2012 00:26:15 GMT+0100 (CET)

为什么我会得到这个结果?我认为日期构造函数的格式是year, month, day, hour, minute, second, millisecond.

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

4

1 回答 1

5

Javascript 月份数字是从 0 开始的。0=1 月,11=12 月。

所以你想要的是这样的:

console.log(new Date(2012, 11, 14, 0, 26, 15, 0));

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

几十年来程序员的烦恼和惊讶,因为有人不能减去 1,或者浪费一个 13 指针数组的元素,或者其他什么。

(这与工作日从 0=Sunday 到 6=Saturday 编号这一事实背后的逻辑相同。这是因为它与 ISO 标准 1=Monday 到 7=Sunday 的模 7 相同。不同的欧洲/美国日历约定和基于 1-vs-0 的计数标准相互抵消... :))

于 2012-12-15T14:16:26.387 回答