GetUTCMonth: примеры (JAVASCRIPT)
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.
function formatUTCMonth(date) {
const months = ['Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'];
return months[date.getUTCMonth()];
}
const myDate = new Date('2024-03-15T00:00:00Z');
console.log(formatUTCMonth(myDate));Март
Пример вычисления разницы в месяцах между двумя датами по UTC.
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 диапазоне.
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() для корректировки дат.
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.