У меня есть фрагмент кода, чтобы найти следующий месяц указанной даты.
var d = new Date('2018-03-31');
dt = new Date(d.setMonth(d.getMonth() + 1));
document.getElementById("demo").innerHTML = dt;
Но мне интересно, что здесь не так, поскольку он добавляет один месяц к March и дает May вместо April?
ДЕМО:
var d = new Date('2018-03-31');
dt = new Date(d.setMonth(d.getMonth() + 1));
document.getElementById("demo").innerHTML = dt;<p id = "demo"></p>Но это month = month +1 правильно?
Да, но 31st April не существует, поэтому он переходит на 1st May
Он добавляет месяц к дате, а не только к месяцу. Итак, у вас 31 апреля, которое фактически становится 1 мая.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


setMonth изменяет исходный объект Date - попробуйте просто setMonth, а затем снова сослаться на объект даты, а не создавать новый:
var d = new Date('2018-03-31');
d.setMonth(d.getMonth() + 1);
document.getElementById("demo").innerHTML = d;<p id = "demo"></p>Это еще май ...
Э-э, показывает апр для меня. Думаю, это проблема с часовым поясом
В апреле всего 30 дней. Если вы добавите 1 к месяцу 31 марта, вы будете на 1 месяц позже, то есть 1 мая.
31st April нет, поэтому он идет на 1st May. Можете попробовать с 2018-03-30
var d = new Date('2018-03-30');
dt = new Date(d.setMonth(d.getMonth() + 1));
document.getElementById("demo").innerHTML = dt;<p id = "demo"></p>d = new Date("2018-01-30") ... - А если ТО не может изменить строку?
Тогда как получить April?
@mpsbhat Проверить дубликат
А также проверьте ответ Йогена
Спасибо @ThumChoonTat .. !!! Разобрался с ошибкой .. !!
Использовать
setMonth(month, day)
d.setMonth(d.getMonth() + 1, 1);, где день как 1st день месяца следующий
Только если вас интересует деталь Месяц
var d = new Date('2018-03-31');
d.setMonth(d.getMonth() + 1, 1);
dt = new Date(d);
document.getElementById("demo").innerHTML = dt;<p id = "demo"></p>
31 апреля нет :)