【发布时间】:2012-05-18 08:10:38
【问题描述】:
当使用零件的数字创建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 提出的问题:Why is January month 0 in Java Calendar?
为什么会这样?
【问题讨论】:
-
值得注意的是,05实际上是一个八进制数。幸运的是八进制 5 == 十进制 5。
-
另外,只是为了引用一些官方的东西:developer.mozilla.org/en/JavaScript/Reference/Global_Objects/…。月份:“表示月份的整数值,从 0 开始表示一月到 11 表示十二月。”
-
谢谢@corbin。我抓住了这一点,但没有将其包含在示例中。我们对来自 .net 的内容进行格式化的标准方法是 MM,所以它被忽略了。幸运的是我不是 09 :)
-
实际上,由于 09 不是有效的八进制,我相信 09 === 9 (基本上作为'oops'后卫)。除非您尝试执行 011 或 012,否则 0 确实是无害的。并不是真的要理解为更正,而只是一个旁注:)
-
啊 :) 我从没试过 09,不知道。我不怎么做JS。
标签: javascript