Learn JavaScript

Date.UTC() - создание UTC timestamp из даты в JavaScript

Date.UTC() создаёт timestamp из отдельных частей даты и времени.

Если говорить просто, этот метод принимает год, месяц, день, часы и другие части даты, а затем возвращает количество миллисекунд с 1 января 1970 года 00:00:00 UTC.

Синтаксис

Базовая запись выглядит так:

Date.UTC(year, monthIndex, day, hours, minutes, seconds, milliseconds)

Где:

  • year - год
  • monthIndex - номер месяца от 0 до 11
  • day - день месяца
  • hours - часы
  • minutes - минуты
  • seconds - секунды
  • milliseconds - миллисекунды

Необязательные аргументы можно не передавать.

Если их нет, JavaScript подставит значения по умолчанию:

  • месяц: 0
  • день: 1
  • часы: 0
  • минуты: 0
  • секунды: 0
  • миллисекунды: 0

Что возвращает Date.UTC()

Метод возвращает число.

const timestamp = Date.UTC(2025, 0, 15);

console.log(timestamp); // 1736899200000
console.log(typeof timestamp); // "number"

Это важно: Date.UTC() возвращает не объект Date, а именно timestamp.

Простой пример

const timestamp = Date.UTC(2025, 0, 15);

console.log(timestamp); // 1736899200000

Здесь:

  • 2025 - год
  • 0 - январь
  • 15 - день месяца

Результат можно потом передать в new Date().

const timestamp = Date.UTC(2025, 0, 15);
const date = new Date(timestamp);

console.log(date.toISOString()); // "2025-01-15T00:00:00.000Z"

Пример со временем

Можно передать не только дату, но и время.

const timestamp = Date.UTC(2025, 0, 15, 10, 30, 0);

console.log(timestamp); // 1736937000000
console.log(new Date(timestamp).toISOString()); // "2025-01-15T10:30:00.000Z"

Такой подход особенно удобен, когда вам нужно получить точный момент времени в UTC.

Date.UTC() работает именно в UTC

Это главный смысл этого метода.

Date.UTC() собирает дату не в локальном часовом поясе пользователя, а именно в UTC.

Поэтому он полезен, когда:

  • нужно получить единое время без привязки к часовому поясу
  • дата должна одинаково считаться у всех пользователей
  • вы работаете с сервером, API или timestamp

Чем Date.UTC() отличается от new Date()

Вот важная разница:

  • Date.UTC() возвращает число
  • new Date(...) возвращает объект Date

Кроме этого, new Date(year, monthIndex, day, ...) создаёт дату в локальном часовом поясе пользователя, а Date.UTC(...) считает дату в UTC.

const utcTimestamp = Date.UTC(2025, 0, 15, 10, 30);
const date = new Date(utcTimestamp);

console.log(typeof utcTimestamp); // "number"
console.log(typeof date); // "object"

Если вам нужен именно timestamp в UTC, чаще подходит Date.UTC().

Если нужен объект даты с методами вроде getFullYear() или toISOString(), тогда обычно используют new Date(...).

Date.UTC() и new Date(Date.UTC(...))

Очень частая связка выглядит так:

const date = new Date(Date.UTC(2025, 0, 15, 10, 30));

console.log(date.toISOString()); // "2025-01-15T10:30:00.000Z"

Здесь:

  • Date.UTC(...) создаёт timestamp
  • new Date(...) превращает этот timestamp в объект Date

Это удобный способ получить объект даты, который изначально собран как момент времени в UTC.

Если передать только год

Можно передать только первый аргумент.

const timestamp = Date.UTC(2025);

console.log(timestamp); // 1735689600000
console.log(new Date(timestamp).toISOString()); // "2025-01-01T00:00:00.000Z"

То есть:

  • год будет 2025
  • месяц станет 0 - январь
  • день станет 1
  • время будет 00:00:00.000

Нумерация месяцев начинается с нуля

Это одна из самых частых ошибок.

В Date.UTC():

  • 0 - январь
  • 1 - февраль
  • 2 - март
  • 11 - декабрь
console.log(new Date(Date.UTC(2025, 0, 1)).toISOString());
// "2025-01-01T00:00:00.000Z"

Если написать 1, это будет уже февраль.

Когда это полезно

Date.UTC() особенно удобен, когда:

  • нужно собрать timestamp из отдельных чисел
  • дата должна считаться именно в UTC
  • вы сохраняете дату для сервера или базы данных
  • хотите избежать влияния локального часового пояса

Пример:

const expiresAt = Date.UTC(2025, 0, 31, 23, 59, 59);

console.log(expiresAt);

Такой timestamp удобно хранить и сравнивать как обычное число.

Date.UTC() не форматирует дату

Метод не возвращает красивую строку и не создаёт готовый объект даты.

Он возвращает только число.

const timestamp = Date.UTC(2025, 0, 15);

console.log(timestamp); // 1736899200000

Если нужен читаемый вид, сначала надо создать объект Date.

const date = new Date(Date.UTC(2025, 0, 15));

console.log(date.toISOString()); // "2025-01-15T00:00:00.000Z"

Частые ошибки

Думать, что Date.UTC() возвращает объект Date

const result = Date.UTC(2025, 0, 15);

console.log(typeof result); // "number"

Это число, а не объект даты.

Путать UTC и локальное время

Date.UTC(2025, 0, 15, 10, 30) означает время 10:30 именно по UTC, а не по локальному часовому поясу пользователя.

Забывать, что месяцы начинаются с нуля

Date.UTC(2025, 1, 1);

Это не январь, а февраль.

Использовать new Date.UTC()

Date.UTC() - это статический метод объекта Date, а не конструктор.

Правильно:

Date.UTC(2025, 0, 15);

А если нужен объект даты:

new Date(Date.UTC(2025, 0, 15));

Не знать про годы от 0 до 99

Если передать год от 0 до 99, JavaScript интерпретирует его как 1900-1999.

const timestamp = Date.UTC(99, 0, 1);

console.log(new Date(timestamp).toISOString()); // "1999-01-01T00:00:00.000Z"

Из-за этого 99 здесь означает не 0099 год, а 1999.

Быстрая памятка

  • Date.UTC() принимает отдельные части даты
  • метод возвращает timestamp в миллисекундах
  • Date.UTC() работает в UTC, а не в локальном времени
  • Date.UTC() не создаёт объект Date
  • месяцы нумеруются от 0 до 11
  • результат Date.UTC(...) можно передать в new Date(...)

Коротко

Date.UTC() в JavaScript нужен, чтобы собрать дату из отдельных значений и сразу получить timestamp в UTC. Главное, что стоит запомнить: метод возвращает число, работает не в локальном времени, а в UTC, и особенно полезен там, где дата должна быть одинаковой для всех пользователей и систем.