10

当使用零件的数字创建new Date对象时,我得到的值正好比我为“月”输入的值提前一个月

new Date(2012, 05, 17, 00, 00, 00)
Sun Jun 17 2012 00:00:00 GMT+0800 (HKT)  // june?!

但是,对完全相同的字符串进行正常解析会返回正确的时间:

new Date("2012-05-17 00:00:00")
Thu May 17 2012 00:00:00 GMT+0800 (HKT)

我在 ie/ff/chrome 中得到了相同的结果。删除小时/分钟/秒没有任何效果。我可以通过在设置月份之前减去一个来解决它,但我只是切换到将我的日期写为字符串。

编辑: 字符串解析在 IE 中不起作用。我不知道我做了什么,但我发誓我做到了。那是概率。为什么我首先避免它。我现在已经改用 moment.js 了。

啊,现在我明白了。就像常规的 Java 日期一样,我很少编写代码,即使这样也总是使用库(joda 等)。无论如何,这是一个多么糟糕的主意。这是 skeets 提出的问题:为什么 Java 日历中的 1 月是 0 月?

为什么会这样?

4

1 回答 1

17

程序员从 0 开始计数。所以月份用 0(Jan)-11(Dec) 表示。

天数不遵循此规则的原因是不要将作者与 30/31 个月的差异混淆。

来自 MDN:

表示月份的整数值,从 0 开始表示一月到 11 表示十二月。

于 2012-05-18T08:11:21.650 回答