getMonth в JavaScript дает в прошлом месяце

139

Я использую средство выбора даты, которое выдает дату в формате Вс 7 июля 00:00:00 ПО ВОСТОЧНОМУ ВРЕМЕНИ 2013. Несмотря на то, что месяц говорит о июле, если я выполняю getMonth, он дает мне предыдущий месяц.

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

Что я делаю не так?

developer747
источник
14
Да ... это нулевой индекс .
эмиссар
2
Не сходите с ума с датами в JavaScript. Используйте Moment.js, если можете
Valamas
6
я не могу поверить, насколько это реально
neaumusic
Moment.js не может правильно делать dateDiffs. Это нормально, если вы делаете dateDiffs в течение одного месяца, но попробуйте сделать это в течение 2 разных месяцев (то есть 27-04-2018 и 24-05-2018), и это выходной.
Роза
1
Подожди, пока не попробуешь getYear()!! ;-)
Джеймс Полус

Ответы:

266

Потому что getmonth () начинается с 0. Вы можете захотеть d1.getMonth() + 1достичь того, чего хотите.

Рахул Трипати
источник
195
Должен сказать, что индексирование нуля месяца - это самая глупая вещь, которую я когда-либо видел. '
LarryBud
5
почему кто-то хотел бы это 0 на основе, если getDate дает 1-31?
Абхинав Гауниал
6
Скорее всего, вам придется сделать d1.getMonth() < 12 ? d1.getMonth() + 1 : 1- иначе будет 13 декабря, не так ли?
DanielKhan
7
@DanielKhan Нет, потому что декабрь будет 11, так что добавление 1 к нему будет правильно сделать функцию его 12. getMonth () никогда не должны возвращать значение в течение 11
unenthusiasticuser
7
@LarryBud, возможно, причина в том, что в отличие от других частей даты (день месяца, год, часы, минуты, секунды ...), которые всегда используются в качестве чисел, месяц часто преобразуется в текст, используя массив имен, который, конечно, основан на 0. Это уже было в стандартных библиотеках языка Си, которым должно быть более 40 лет.
jcaron
19

getMonth()функция основана на нуле. Вам нужно сделатьd1.getMonth() + 1

Недавно я использовал библиотеку Moment.js и никогда не оглядывался назад. Попытайся!

letiagoalves
источник
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 

Надеюсь это поможет

Я подозреваю, что этим методам не хватает последовательности по историческим причинам.

jasonleonhard
источник