logo

Конвертация UTC эпохи в локальную дату: метод new Date()

Быстрый ответ

Преобразовать временную метку UTC Epoch в локальную дату можно с помощью следующего фрагмента кода на JavaScript, который принимает метку времени в миллисекундах:

JS
Скопировать код
const epoch = 1609459200; // Временная метка Epoch
const localDate = new Date(epoch * 1000).toLocaleString(); // Преобразуем в локальное время
console.log(localDate); // Выводим локальную дату и время

Здесь временная метка Epoch умножается на 1000, чтобы конвертировать её в миллисекунды, которые можно использовать как аргумент для объекта Date. Метод toLocaleString() представляет локальную дату и время.

Дата, UTC и Epoch: триптих

JavaScript обрабатывает даты через объект Date, работая с миллисекундами, прошедшими с определённой отсчётной точки, известной как Epoch, или 1-е января 1970 года, 00:00:00 по времени UTC. Создание экземпляра new Date(0) возвращает нас к этому началу эпохи.

Из UTC в локальное время: пересечение часовых поясов

JavaScript предоставляет специализированные методы, такие как setUTCSeconds и getTimezoneOffset, позволяющие корректно осуществлять переход от времени UTC к времени в локальном часовом поясе и обратно.

Внимание при работе с часовыми поясами

Есть несколько важных аспектов, которые стоит иметь в виду при работе с объектом Date и преобразовании часовых поясов:

  • Объект Date работает с миллисекундами, в то время как метка времени Epoch использует секунды.
  • Метод getTimezoneOffset возвращает разницу в минутах между локальным временем и UTC.
  • Объект Date корректно учитывает переход на летнее время (DST).

Библиотеки для работы со временем: Moment.js и прочие

При работе со временем и часовыми поясами могут быть полезны следующие библиотеки:

  • Moment.js: предоставляет простую функцию для преобразования UTC в локальное время.
  • Day.js: лёгкий аналог Moment.js.
  • Luxon: разработан командой Moment.js, обеспечивает работу с неизменяемыми датами.

Функции для преобразования: Epoch и JavaScript Date

Преобразование между метками времени Epoch и объектами Date в JavaScript можно упростить с помощью следующих функций:

JS
Скопировать код
function epochToJsDate(ts) {
  return new Date(ts * 1000); // Преобразование из Epoch в Date
}

function jsDateToEpoch(d) {
  return Math.floor(d.getTime() / 1000); // И обратно
}

Визуализация

Процесс преобразования времени UTC Epoch в локальное время можно сравнить с переводом часов от поясного времени GMT к локальному времени в вашем часовом поясе:

Markdown
Скопировать код
UTC Epoch:              🕛 1610233200 (Epoch time)
JS
Скопировать код
const localDate = new Date(1610233200 * 1000);

И вы получите время в вашем локальном формате:

Markdown
Скопировать код
localDate:              🏠 01/10/2021, 12:00 AM (Ваш локальный формат)

От GMT до вашего локального времени — всего один шаг!

Когда встречаются необычные случаи: високосные секунды, DST и другое

Существуют особые случаи при работе с временем и датами в JavaScript:

  • Високосные секунды: объект Date не учитывает внезапно появляющиеся дополнительные секунды.
  • Понятный формат: используйте toLocaleString() для более удобного представления времени.
  • Библиотеки: помогут представить даты в подходящем формате, например, со стороны Moment.js или Luxon.

Полезные материалы

  1. Date – JavaScript | MDN — обзор объекта Date в JavaScript.
  2. How do I get a timestamp in JavaScript? – Stack Overflow — обсуждение получения меток времени в JavaScript.
  3. Moment.js | Документация — документация Moment.js для работы с часовыми поясами.
  4. Convert UTC Epoch to local date – Stack Overflow — обсуждение преобразования времени UTC Epoch в локальную дату.
  5. UTC · Day.js — документация по библиотеке Day.js.
  6. Luxon – идеальный инструмент для работы с датами — представление Luxon, инструментом для работы с датами.
  7. Справочник JavaScript по Date — справочник по объекту Date в JavaScript.