JavaScript | UTC дату из 13 цифр в обычный человеческий формат

JavaScript | UTC дату из 13 цифр в обычный человеческий формат

У нас есть число из 13 цифр.

let number13 = 1646944886676;

Это число является кодом UTC, который символизирует некую временную дату. Аббревиатура UTC расшифровывается как Coordinated Universal Time (Всемирное Координированное Время).

Мы хотим получить какую-то внятную строку, по которой можно понять год, месяц, день, час и минуту, которые символизирует эта UTC-дата. Как это сделать?

 

Решение

Для решения задачи нужно учитывать разный результат в работе конструктора Date().

Его можно вызвать в двух вариациях:

// Вызов БЕЗ оператора new

Date(1646944886676)

// Вызов С оператором new

new Date(1646944886676)

 

Разница в вызовах существенная.

Вызвали конструктор Date() с и без оператора new - JavaScript
Вызвали конструктор Date() с и без оператора new — JavaScript

БЕЗ new мы получаем просто ТЕКУЩУЮ дату формата ‘Sun Mar 13 2022 13:32:50 GMT+0300 (Москва, стандартное время)’ в виде обычной строки JavaScript. Передаваемое в конструктор число было тупо проигнорировано.

С new мы получаем нужный нам ИСТОРИЧЕСКИЙ МОМЕНТ во времени, но не в виде строки, а в виде объекта, из которого можно доставать всё что нам нужно.

 

Что делать с объектом даты?

Теперь мы можем превратить полученный с new объект даты в нужную нам строку. Например:

// По стандарту ECMAScript

new Date(1646944886676).toDateString()
'Thu Mar 10 2022'

new Date(1646944886676).toISOString()
'2022-03-10T20:41:26.676Z'

new Date(1646944886676).toJSON()
'2022-03-10T20:41:26.676Z'

new Date(1646944886676).toLocaleDateString()
'10.03.2022'

new Date(1646944886676).toLocaleString()
'10.03.2022, 23:41:26'

new Date(1646944886676).toLocaleTimeString()
'23:41:26'

new Date(1646944886676).toString()
'Thu Mar 10 2022 23:41:26 GMT+0300 (Москва, стандартное время)'

new Date(1646944886676).toTimeString()
'23:41:26 GMT+0300 (Москва, стандартное время)'

new Date(1646944886676).toUTCString()
'Thu, 10 Mar 2022 20:41:26 GMT'

new Date(1646944886676).valueOf()
1646944886676

 

// Из сторонних API

new Date(1646944886676).toGMTString()
'Thu, 10 Mar 2022 20:41:26 GMT'

 

Вытаскиваем ГОД из 13 цифр UTC-даты

new Date(1646944886676).getFullYear()
2022

 

Вытаскиваем МЕСЯЦ из 13 цифр UTC-даты

Но тут есть прикол с индексацией месяцев. Индексация начинается как в массивах с НУЛЯ.

Логика сопоставления порядкового номера месяца у метода getMonth в Date - JavaScript
Логика сопоставления порядкового номера месяца у метода getMonth в Date — JavaScript
new Date(1646944886676).getMonth()
2

Мы получили 2 — это индекс. Нужно добавить единицу, чтобы понять что это месяц март.

 

Вытаскиваем ДЕНЬ из 13 цифр UTC-даты

new Date(1646944886676).getDate()
10

Получаем десятое число месяца.

 

Как получить дату в формате 13 цифр из человеческого формата в JavaScript?

Чтобы обратно получить дату в формате UTC нужно использовать метод parse() у конструктора Date.

Date.parse('2023-07-21T07:46:22.550Z')

1689925582550
Получили дату в 13 числовом формате методом parse() в JavaScript
Получили дату в 13 числовом формате методом parse() в JavaScript

 

Информационные ссылки

Стандарт ECMAScript — Раздел «21.4 Date Objects» — https://tc39.es/ecma262/multipage/numbers-and-dates.html#sec-date-objects