Javascript месяц неправильный [дубликаты]

1

Пожалуйста, скажите мне, почему месяц увеличивается на 1, если его значение выше 9. Код ниже

var dd = new Date();
dd.setFullYear(2017);
dd.setMonth(7);
console.log("Month(Expecting 7, and received 7) = " + dd.getMonth());
dd.setMonth(10);
console.log("Month(Expecting 10, and received 11) = " + dd.getMonth());

Код Fiddler здесь - https://jsfiddle.net/vzmtp3ua/

  • 5
    Это потому, что в этом месяце 31 день, поэтому в настоящее время 31 день. Нет 31 ноября;)
Теги:
date

6 ответов

4

Поскольку 31 месяц не существует в каждом месяце, поэтому дополнительные дни добавляются к следующему месяцу.

Установите дату как 31 октября, добавьте месяц, так что это будет 31 ноября, так как есть 30 дней, когда дата перенесена на 1 декабря.

2

В некоторые месяцы меньше дней, чем 31, поэтому дополнительные дни добавляются к следующему месяцу

1

Не все месяцы имеют одинаковое количество дней (31), поэтому следующий будет перенесен на следующий месяц

1

Это связано с количеством дней в этом месяце, смену даты в первый день следующего месяца. В документации упоминается следующее: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setMonth

Текущий день месяца повлияет на поведение этого метода. Концептуально он добавит количество дней, заданных в текущий день месяца, до 1-го числа нового месяца, указанного в качестве параметра, чтобы вернуть новую дату. Например, если текущее значение составляет 31 августа 2016 года, вызов setMonth со значением 1 вернется 2 марта 2016 года. Это связано с тем, что в 2016 году февраль имел 29 дней.

0

Когда вы создаете объект Date 31 октября, а затем установите месяц до ноября (= 10!), Который не имеет 31 дня, он переключится на 1-е из следующего месяца (1 декабря).

0

Это зависит от текущей даты. Вы инициализируете дату "сейчас" (new Date()), а сегодня - 31 октября.

Если день вашего объекта Date - 31-й, и вы вызываете setMonth(), дополнительные дни будут перенесены на следующий месяц в течение нескольких месяцев менее 31 дня. Если вы попробуете setMonth(1) это будет означать 31 февраля, так что вы получите 3 марта.

Чтобы избежать проблемы, вы можете передать второй аргумент setMonth, который является днем, который должен быть установлен, например dd.setMonth(10,30) (30 ноября).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню