как добавлять месяцы к дате в javascript с учетом перехода года
Прежде всего, создайте объект Date
на основе вашей начальной даты. Это можно сделать как с помощью строкового представления даты, так и используя значения для год, месяц, день.
let startDate = new Date(2023, 0, 31); // 31 января 2023 года
Теперь создадим функцию, которая будет принимать дату и количество месяцев, которые необходимо добавить.
function addMonths(date, months) {
// Копируем объект date, чтобы не изменять исходное
let newDate = new Date(date);
// Добавляем месяцы
newDate.setMonth(newDate.getMonth() + months);
// Проверяем, не произошел ли переход на следующий месяц
if (newDate.getDate() < date.getDate()) {
// Если новый месяц имеет меньше дней, чем исходный, устанавливаем в последний день нового месяца
newDate.setDate(0); // Устанавливаем в 0, чтобы получить последний день предыдущего месяца
}
return newDate;
}
Мы создаем новый объект даты, чтобы не изменять оригинальный объект. Это особенно важно, если вы используете функцию в контексте, где исходная дата может понадобиться позже.
Используя метод setMonth()
, мы добавляем необходимое количество месяцев. Этот метод также автоматически обрабатывает переход на следующий год (например, добавление 13 месяцев к январю 2023 вернет февраль 2024).
Если число в новом месяце меньше, чем в исходном (например, переход из января в март), мы устанавливаем дату в последний день нового месяца, таким образом избегая ошибок, связанных с несуществующими датами (например, попытка установить 31 февраля).
const date1 = new Date(2023, 0, 31); // 31 января 2023
console.log(addMonths(date1, 1)); // 28 февраля 2023
const date2 = new Date(2023, 1, 30); // 30 февраля 2023 (но 30 февраля не существует)
console.log(addMonths(date2, 1)); // 30 марта 2023
const date3 = new Date(2023, 11, 31); // 31 декабря 2023
console.log(addMonths(date3, 1)); // 31 января 2024