функция ± месяц, как лучше составить?
есть две кнопки, -месяц и +месяц, при клике на которые дата должна изменится, суть вопроса, как получить новую дату на месяц меньше/больше, например если к дате 31.01 прибавить месяц, получим 31 февраля, js автоматически распределит на март, а как сделать, чтобы получаемая дата в случае выхода за рамки следующего месяца, не распределялась на соседний месяц, а исправлялась на последнее число нужного месяца, если прибавляем к 31.01 месяц, надо перейти к 28(или 29) февраля,
Ответы (2 шт):
Автор решения: Qwertiy
→ Ссылка
- Добавляем месяц.
- Если получившийся месяц отличается от исходного не на 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) {
...