Пожалуйста, скажите мне, почему месяц увеличивается на 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/
Поскольку 31 месяц не существует в каждом месяце, поэтому дополнительные дни добавляются к следующему месяцу.
Установите дату как 31 октября, добавьте месяц, так что это будет 31 ноября, так как есть 30 дней, когда дата перенесена на 1 декабря.
В некоторые месяцы меньше дней, чем 31, поэтому дополнительные дни добавляются к следующему месяцу
Не все месяцы имеют одинаковое количество дней (31), поэтому следующий будет перенесен на следующий месяц
Это связано с количеством дней в этом месяце, смену даты в первый день следующего месяца. В документации упоминается следующее: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setMonth
Текущий день месяца повлияет на поведение этого метода. Концептуально он добавит количество дней, заданных в текущий день месяца, до 1-го числа нового месяца, указанного в качестве параметра, чтобы вернуть новую дату. Например, если текущее значение составляет 31 августа 2016 года, вызов setMonth со значением 1 вернется 2 марта 2016 года. Это связано с тем, что в 2016 году февраль имел 29 дней.
Когда вы создаете объект Date 31 октября, а затем установите месяц до ноября (= 10!), Который не имеет 31 дня, он переключится на 1-е из следующего месяца (1 декабря).
Это зависит от текущей даты. Вы инициализируете дату "сейчас" (new Date()
), а сегодня - 31 октября.
Если день вашего объекта Date - 31-й, и вы вызываете setMonth()
, дополнительные дни будут перенесены на следующий месяц в течение нескольких месяцев менее 31 дня. Если вы попробуете setMonth(1)
это будет означать 31 февраля, так что вы получите 3 марта.
Чтобы избежать проблемы, вы можете передать второй аргумент setMonth
, который является днем, который должен быть установлен, например dd.setMonth(10,30)
(30 ноября).