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

Работа с UTC месяцами в JavaScript: функция getUTCMonth
Раздел: Дата и время, UTC методы
getUTCMonth: number

Основы функции getUTCMonth

Метод getUTCMonth() является частью объекта Date в JavaScript. Он применяется для получения порядкового номера месяца из даты, представленной в объекте Date, но в соответствии с всемирным координированным временем (UTC).

Функция не принимает никаких аргументов. Она возвращает целое число в диапазоне от 0 до 11, где 0 соответствует январю, 1 — февралю и так далее, 11 — декабрю. Это может привести к путанице, если забыть о нумерации с нуля.

Использование UTC времени означает, что функция возвращает месяц для даты, преобразованной в временную зону UTC, игнорируя локальное время системы или браузера. Это полезно для согласованной работы с датами на серверах и клиентах в разных часовых поясах.

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

Пример получения месяца из текущей даты по UTC.

const now = new Date();
console.log(now.getUTCMonth());
7 // (например, если сейчас август)

Пример с конкретной датой.

const date = new Date('2023-11-05T12:00:00Z');
console.log(date.getUTCMonth());
10 // Ноябрь

Пример, демонстрирующий разницу с локальным временем при переходе через месяц.

const localDate = new Date('2023-12-31T23:59:59');
console.log('UTC месяц:', localDate.getUTCMonth());
console.log('Локальный месяц:', localDate.getMonth());
UTC месяц: 11
Локальный месяц: 11 // Результат может отличаться в зависимости от часового пояса пользователя

Альтернативы в JavaScript

getMonth() — возвращает месяц по местному времени. Прямой аналог, но учитывающий локальный часовой пояс системы. Используется, когда нужно отобразить месяц с учетом местоположения пользователя.

toISOString() — возвращает строку даты в формате ISO 8601 (например, '2023-08-10T12:00:00.000Z'), из которой можно извлечь месяц, но требуется дополнительный парсинг. Подходит для получения полной строки даты в UTC.

Intl.DateTimeFormat — мощный API для форматирования дат с учетом локали. Позволяет получить названия месяцев. Предпочтительнее для сложного локализованного вывода, а не для простого числового значения.

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

Путаница с нумерацией месяцев. Самый частый недочет — прибавлять 1 к результату для отображения.

const monthNum = new Date().getUTCMonth();
console.log('Текущий месяц номер:', monthNum); // Ошибка восприятия
Текущий месяц номер: 7 // Для августа

Игнорирование временных зон. Создание даты без указания временной зоны может привести к неожиданным результатам при сравнении UTC и локального времени.

const d = new Date('2023-01-01'); // Создается как UTC
console.log(d.getUTCMonth(), d.getMonth());
0 0 // В данном случае может совпасть, но не всегда

Использование с невалидной датой. Если объект Date содержит невалидную дату, метод вернет NaN.

const invalidDate = new Date('invalid-string');
console.log(invalidDate.getUTCMonth());
NaN

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

Метод getUTCMonth() был стандартизирован в спецификации ECMAScript 1 (ES1) 1997 года. С тех пор его поведение остается стабильным и неизменным во всех последующих версиях ECMAScript, включая ES6 (ES2015) и более новые.

Изменения, связанные с работой с датами, в основном касались общего объекта Date, форматов строкового представления и добавления API Intl, но не затрагивали сигнатуру или логику данного конкретного метода.

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

Пример использования в функции для форматирования даты в читаемый вид с названием месяца по UTC.

Пример javascript
function formatUTCMonth(date) {
    const months = ['Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'];
    return months[date.getUTCMonth()];
}
const myDate = new Date('2024-03-15T00:00:00Z');
console.log(formatUTCMonth(myDate));
Март

Пример вычисления разницы в месяцах между двумя датами по UTC.

Пример javascript
function monthDiffUTC(start, end) {
    return (end.getUTCFullYear() - start.getUTCFullYear()) * 12 + (end.getUTCMonth() - start.getUTCMonth());
}
const start = new Date('2023-06-01T00:00:00Z');
const end = new Date('2024-02-01T00:00:00Z');
console.log(monthDiffUTC(start, end));
8

Пример итерации по месяцам в заданном UTC диапазоне.

Пример javascript
const startDate = new Date('2024-01-01T00:00:00Z');
const endDate = new Date('2024-04-01T00:00:00Z');
let current = new Date(startDate);
while (current < endDate) {
    console.log(current.toISOString(), 'Месяц UTC:', current.getUTCMonth() + 1);
    current.setUTCMonth(current.getUTCMonth() + 1);
}
2024-01-01T00:00:00.000Z Месяц UTC: 1
2024-02-01T00:00:00.000Z Месяц UTC: 2
2024-03-01T00:00:00.000Z Месяц UTC: 3
2024-04-01T00:00:00.000Z Месяц UTC: 4

Использование в комбинации с setUTCMonth() для корректировки дат.

Пример javascript
const d = new Date('2023-07-31T00:00:00Z');
d.setUTCMonth(d.getUTCMonth() + 2); // Добавляем 2 месяца
console.log(d.toISOString());
2023-09-30T00:00:00.000Z // Учитывается количество дней в месяцах

Функции в других языках

PHP: date('m', $timestamp) — форматирует временную метку. Возвращает номер месяца от 01 до 12, а не с нуля. Для UTC нужно использовать gmdate().

echo gmdate('m', strtotime('2023-11-05'));
11

Python: datetime.utcnow().month — у объекта datetime атрибут month возвращает число от 1 до 12.

from datetime import datetime
print(datetime.utcnow().month)
8

MySQL: MONTH(utc_date) — функция MONTH() возвращает значение от 1 до 12. Для работы с UTC часто используют тип UTC_DATE или UTC_TIMESTAMP.

SELECT MONTH(UTC_TIMESTAMP());
8

C / C++: tm_mon в структуре tm — при использовании функций типа gmtime() месяц хранится в поле tm_mon структуры tm и также нумеруется с 0.

JS getUTCMonth function comments

En
GetUTCMonth Returns the month in the specified date according to universal time