Ошибка метода setMonth () в JavaScript - PullRequest
0 голосов
/ 18 декабря 2018

Кажется, эта Date.setMonth функция JavaScript делает то, для чего она не предназначена.Вот фрагмент кода.В этом сценарии мы пытаемся получить последнюю дату каждого месяца.

var d = new Date(2018, 11, 31); // this would set it to Dec 31 2018
d.setMonth(d.getMonth() + 1);   // this would set it to Jan 31 2019
d.setMonth(d.getMonth() + 1);   // this would set it to March 03 2019
alert(d);

Итак, похоже, что функция установки месяца просто добавила 30 дней к предыдущей дате (31 января 2019 г.), что неоднозначно.Та же самая проблема может возникнуть в случае месяца с 30 днями.

Есть ли какое-нибудь решение, которое может дать нам точное решение этой проблемы, когда добавление месяцев просто меняет месяцы?и установить дату последней даты, если не существует?

Ответы [ 3 ]

0 голосов
/ 18 декабря 2018

Попробуйте

new Date(d.getFullYear(), d.getMonth() + 1);

var d = new Date();
var d = new Date(d.getFullYear(), d.getMonth() + 1);
console.log(d); // last day
0 голосов
/ 18 декабря 2018

Для февраля 2019 года дата месяца лежит в диапазоне от 1 до 28, но дата уже установлена ​​как 31, поэтому будет установлена ​​дата 3 для следующего месяца, потому что 31-28 = 3.Для справки проверьте this .

Чтобы получить последнюю дату месяца, попробуйте следующее:

var d = new Date(2018, 11, 31);  // Dec 31 2018  
var last = new Date(d.getFullYear(), d.getMonth() + 2, 0);
console.log(last); // Jan 31 2019
last = new Date(d.getFullYear(), d.getMonth() + 3, 0);
console.log(last); // Feb 28 2019
0 голосов
/ 18 декабря 2018

Для получения последней даты следующего месяца используйте следующее:

var d = new Date(2018, 11, 31); // Dec 31 2018
d.setDate(1);                   // first day of current month
d.setMonth(d.getMonth() + 2);   // add *two* months
d.setDate(0);                   // 0 makes the date roll back to previous month
d;                              // Jan 31 2019
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...