функция ± месяц, как лучше составить?

есть две кнопки, -месяц и +месяц, при клике на которые дата должна изменится, суть вопроса, как получить новую дату на месяц меньше/больше, например если к дате 31.01 прибавить месяц, получим 31 февраля, js автоматически распределит на март, а как сделать, чтобы получаемая дата в случае выхода за рамки следующего месяца, не распределялась на соседний месяц, а исправлялась на последнее число нужного месяца, если прибавляем к 31.01 месяц, надо перейти к 28(или 29) февраля,


Ответы (2 шт):

Автор решения: Qwertiy
  1. Добавляем месяц.
  2. Если получившийся месяц отличается от исходного не на 1 (а на 2 по модулю 12), то устанавливаем число в 0 и получаем последний день нужного месяца.

function addMonth(date) {
  var d = new Date(date)
  var m = d.getMonth()
  
  d.setMonth(m + 1)

  if (d.getMonth() !== (m + 1) % 12) {
    d.setDate(0)
  }
  
  return d
}

for (const d of ['2024-01-15', '2024-01-31', '2023-01-31', '2000-02-29', '2024-01-01', '2023-11-30', '2023-12-31']) {
  console.log(d, addMonth(d))
}
.as-console-wrapper.as-console-wrapper { max-height: 100vh }

→ Ссылка
Автор решения: rotabor

Как мне подсказали, для JS не принято изобретать велосипед, а нужно пользоваться готовыми библиотеками.

Поэтому отсылаю Вас к Datejs:

    /**
     * Adds the specified number of months to this instance. 
     * @param {Number}   The number of months to add. The number can be positive or negative [Required]
     * @return {Date}    this
     */
    $P.addMonths = function (value) {
    ...
→ Ссылка