SetMonth: примеры (JAVASCRIPT)

Метод setMonth для работы с датами в JavaScript
Раздел: Дата и время, Методы
setMonth(monthValue: number, dayValue?: number): number

Основные сведения о setMonth

Метод setMonth() в JavaScript принадлежит объекту Date. Он устанавливает месяц для указанной даты по местному времени.

Функция используется, когда необходимо изменить месяц или месяц и день в существующем объекте Date, например, для корректировки дат в календарях, вычисления будущих или прошедших периодов.

Аргументы

  • monthValue (обязательный): Целое число, представляющее месяц. Значения от 0 (январь) до 11 (декабрь). Допускаются значения за пределами этого диапазона. Например, 12 означает январь следующего года, а -1 — декабрь предыдущего года.
  • dayValue (необязательный): Целое число от 1 до 31, представляющее день месяца. Если параметр указан, метод устанавливает также и день месяца. Если не указан, используется текущий день месяца объекта Date.

Возвращаемое значение

Метод возвращает количество миллисекунд, прошедших с 1 января 1970 года 00:00:00 UTC до обновленной даты. При этом исходный объект Date изменяется.

Простые примеры использования

Установка месяца с использованием стандартных значений.

let date = new Date('2024-01-15');
date.setMonth(5);
console.log(date);
Sat Jun 15 2024 03:00:00 GMT+0300 (Москва, стандартное время)

Установка месяца и дня одновременно.

let date = new Date('2024-01-15');
date.setMonth(5, 20);
console.log(date);
Thu Jun 20 2024 03:00:00 GMT+0300 (Москва, стандартное время)

Использование значений за пределами обычного диапазона месяцев.

let date = new Date('2024-06-10');
date.setMonth(14);
console.log(date);
Mon Mar 10 2025 03:00:00 GMT+0300 (Москва, стандартное время)

Похожие методы в JavaScript

  • setUTCMonth(): Устанавливает месяц по всемирному координированному времени (UTC). Используется, когда необходима работа с временем в формате UTC, независимо от локальных настроек.
  • setFullYear(): Устанавливает год (а также опционально месяц и день). Предпочтительнее, когда требуется изменить год, чтобы избежать побочных эффектов с днями месяца при переходе через високосные годы.
  • setDate(): Устанавливает день месяца. Подходит для манипуляций только с днями, без изменения месяца или года.

Распространенные ошибки

Передача строкового значения вместо числового может привести к неожиданным результатам из-за неявного преобразования типов.

let d = new Date('2024-01-15');
d.setMonth('5'); // Строка '5' преобразуется в число 5
console.log(d.getMonth()); // 5 (июнь) - работает

d.setMonth('abc');
console.log(d.getMonth()); // NaN, дата становится Invalid Date
5
NaN

Забывают, что метод изменяет исходный объект.

let originalDate = new Date('2024-01-20');
let newDate = originalDate;
newDate.setMonth(2);
console.log(originalDate.getMonth()); // 2, а не 0
2

История изменений

Метод setMonth() был стандартизирован в ECMAScript 1 (1997). Существенных изменений в его работе за последние версии стандарта ECMAScript не вносилось. Поведение с нечисловыми аргументами и выходом за диапазон остается стабильным, но зависит от алгоритма преобразования типов, который может уточняться в спецификации.

Расширенные примеры

Корректная обработка последнего дня месяца: установка февраля для даты 31 января.

Пример javascript
let date = new Date(2024, 0, 31); // 31 января 2024
date.setMonth(1); // Февраль (месяц 1)
console.log(date); // Февраль имеет только 29 дней в 2024
Thu Feb 29 2024 00:00:00 GMT+0300 (Москва, стандартное время)

Использование отрицательных значений для вычитания месяцев.

Пример javascript
let date = new Date('2024-06-10');
date.setMonth(-3); // 3 месяца назад от января (0)
console.log(date);
Mon Sep 10 2023 03:00:00 GMT+0300 (Москва, стандартное время)

Пакетное изменение дат в массиве с помощью setMonth().

Пример javascript
let dates = [new Date('2024-01-10'), new Date('2024-02-15')];
dates.forEach(d => d.setMonth(d.getMonth() + 4));
console.log(dates.map(d => d.toDateString()));
['Wed May 10 2024', 'Sat Jun 15 2024']

Расчет даты через несколько лет и месяцев с учетом коррекции дня.

Пример javascript
function addMonths(date, monthsToAdd) {
  let newDate = new Date(date);
  newDate.setMonth(newDate.getMonth() + monthsToAdd);
  // Если день не совпадает (попали на короткий месяц), вернуться на последний день
  if (newDate.getDate() != date.getDate()) {
    newDate.setDate(0); // Последний день предыдущего месяца
  }
  return newDate;
}
let d = new Date(2023, 0, 31); // 31 января
console.log(addMonths(d, 1).toDateString()); // Добавляем 1 месяц
Tue Feb 28 2023

Аналоги в других языках программирования

PHP

Функция date_modify() с относительным форматом или создание нового объекта DateTime.

$date = new DateTime('2024-01-15');
$date->modify('+5 month');
echo $date->format('Y-m-d');
2024-06-15

Python

Использование метода replace() объекта datetime или timedelta из модуля datetime.

from datetime import datetime, timedelta
date = datetime(2024, 1, 15)
new_date = date.replace(month=6)
print(new_date)
2024-06-15 00:00:00

MySQL

Функция DATE_ADD() или оператор INTERVAL.

SELECT DATE_ADD('2024-01-15', INTERVAL 5 MONTH);
2024-06-15

JS setMonth function comments

En
SetMonth Sets the month for a specified date according to local time