как добавлять месяцы к дате в javascript с учетом перехода года

Аватар пользователя Ivan Gagarinov
Ivan Gagarinov
22 декабря 2024

Прежде всего, создайте объект 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
0 0
Познакомьтесь с основами JavaScript бесплатно