用数字创建日期(新日期(2012年,03年,...)给出错误的月份(+1)

And*_*ker 10 javascript

当创建一个new Date使用号码为部分对象,我回来的值精确1个月未来我把在"月"的价值.

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

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

new Date("2012-05-17 00:00:00")
Thu May 17 2012 00:00:00 GMT+0800 (HKT)
Run Code Online (Sandbox Code Playgroud)

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

编辑: 字符串解析在IE中不起作用.我不知道我做了什么,但我发誓我做了那件事.多数民众赞成.为什么我首先避免它.我现在转而使用moment.js.

啊,现在我明白了.就像常规的java日期一样,我很少编写代码,甚至很少,甚至总是用库(joda等).无论如何,这是多么可怕的想法.以下是双关语问题:为什么Java Calendar中的1月 0月

为什么会这样?

Mad*_*iha 16

程序员从0开始计数.所以月份由0(1月)-11(12月)表示.

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

来自MDN:

表示月份的整数值,从1月的0开始到12月的11.

  • 啊,有我正在寻找的参考.谷歌搜索这组信息只是没有帮助.但是对于FFS来说,谁在地球上*认为这会让人感到困惑?_people_从1开始计算,我从来没有见过一个库,从基本到java,ruby到perl,到现在,c#.叹.是的,我是一名程序员,我认为这就是原因,但它似乎是*愚蠢的*. (2认同)