JavaScript中的getMonth给出上个月


139

我正在使用日期选择器,该日期选择器以2013年7月7日EDT EDT 7的格式给出日期。即使月份是7月份,如果我执行getMonth,它也会给我前一个月份。

var d1 = new Date("Sun Jul 7 00:00:00 EDT 2013");
d1.getMonth());//gives 6 instead of 7

我究竟做错了什么?


14
是的...它的索引为零
大使

2
别忘了使用javascript中的日期。如果可以,请使用Moment.js
Valamas

6
简直不敢

Moment.js无法正确执行dateDiffs。如果您在同一个月内执行dateDiffs没关系,但是请尝试在两个不同的月份(即27-04-2018和24-05-2018)中进行操作,这是一天的工作。
罗扎

1
等到你尝试getYear()!;-)
James Poulose

Answers:


265

因为getmonth()从0开始。您可能需要d1.getMonth() + 1实现所需的功能。


193
我得说,索引一个零月的数字是我一段时间以来最愚蠢的事情。'
LarryBud

5
如果getDate给出1-31,为什么有人要基于0?
Abhinav Gauniyal,2017年

6
您很有可能必须做d1.getMonth() < 12 ? d1.getMonth() + 1 : 1-否则12月将是13,不是吗?
DanielKhan

7
@DanielKhan不,因为月是11,所以加1,将正确使它12.得到月()函数超过11.不应该再回到价值
unenthusiasticuser

7
@LarryBud,原因可能是与日期的其他部分(月,日,年,小时,分钟,秒...)相反,它们总是按原样使用数字,因此月份通常会转换为文本,使用名称数组,当然是从0开始的。在C标准库中已经是这种情况,必须已有40多年的历史了。
jcaron

19

getMonth()函数基于零索引。你需要做d1.getMonth() + 1

最近,我使用了Moment.js库,从没有回头。试试吧!


10

假设您使用变量

var d1 = new Date("Sun Jul 7 00:00:00 EDT 2013");

一个月需要+1才能准确,它从0开始计数

d1.getMonth() + 1 // month 

相比之下...。这些方法不需要加1

d1.getSeconds()   // seconds 
d1.getMinutes()   // minutes 
d1.getDate()      // date    

并注意它.getDate()不是。getDay()

d1.getDay()       // day of the week as a 

希望这可以帮助

我怀疑这些方法由于历史原因缺乏一致性

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.