getMonth у JavaScript видає минулого місяця


139

Я використовую датчик, який дає дату у форматі Sun Jul 7 00:00:00 EDT 2013. Незважаючи на те, що місяць говорить липень, якщо я отримую getMonth, він дає мені попередній місяць.

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

Що я роблю неправильно?



2
Не забувайте про дату в JavaScript. Використовуйте Moment.js, якщо зможете
Valamas

6
я не можу повірити, наскільки це реально
неаумузичний

Moment.js не може виконати dateDiffs правильно. Це добре, якщо ви робите dateDiffs протягом того ж місяця, але спробуйте це робити протягом двох різних місяців (тобто 27-04-2018 та 24-05-2018), і це вихідний день.
rozza

1
Зачекайте, поки ви спробуєте getYear()!! ;-)
Джеймс Поулоз

Відповіді:


266

Тому що getmonth () починається з 0. Можливо, вам доведеться d1.getMonth() + 1досягти того, чого ви хочете.


194
Треба сказати, що індексувати число нуля місяця - це найглуміша річ, яку я бачив за деякий час. '
LarryBud

5
чому хтось хоче, щоб це було 0, якщо getDate дає 1-31?
Абхінав Гауніял

6
Швидше за все, вам доведеться це зробити d1.getMonth() < 12 ? d1.getMonth() + 1 : 1- інакше грудень буде 13, чи не так?
Даніель Хан

7
@DanielKhan Ні, тому що грудня було б 11, тому додавання 1 до нього правильно зробить це 12. Функція getMonth () ніколи не повинна повертати значення понад 11.
unenthusiasticuser

7
@LarryBud, мабуть, міркування ймовірно, що на відміну від інших частин дати (день місяця, року, годин, хвилин, секунд ...), які завжди використовуються як числа, як є, місяць часто перетворюється на текст, використовуючи масив імен, який, звичайно, базується на 0. Це вже було в стандартних бібліотеках С, яким повинно бути старше 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 

Сподіваюся, це допомагає

Я підозрюю, що ці методи не мають послідовності з історичних причин

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.