Очередной блог фрилансера

коротко и полезно о веб-разработке

Menu Close

О DateTime в UTC замолвите слово

Давайте на минуточку вспомним то, что все и так знают. Дата в UTC — это дата по Гринвичу, то есть GMT±0:00.

Соответственно, если мы получаем с сервера дату/время в UTC, мы должны конвертировать ее с учетом нашего локального часового пояса.
Для этого в яваскрипте есть разные способы.

Самый простой, это создать объект даты из полученной строки, а затем вызвать метод toString()

const date = new Date('2020-09-13T21:11:32+0000');
date.toString(); // выведет Mon Sep 14 2020 00:11:32 GMT+0300 (Moscow Standard Time)

Или можно вот так, например, получив разницу во времени:

const date = new Date('2020-09-13T21:11:32+0000');
const difference = date.getTimezoneOffset();
const localDate = new Date(date.getTime() + difference).toString(); // так же выведет Mon Sep 14 2020 00:11:32 GMT+0300 (Moscow Standard Time)

 

Но прежде, чем начинать что-то куда-то конвертировать, присмотритесь внимательно к дате, которая пришла с сервера. Вполне может оказаться, что дата возвращается в формате ISO 8601 — что есть международный формат форматирования даты и времени. Он, в том числе, указывает часовой сдвиг либо говорит нам о том, что дата в UTC.

Как это выглядит?

1994-11-05T08:15:30-05:00 // -5 часов по Гринвичу
1994-11-05T13:15:30Z // буква Z в конце означает 0 часов по Гринвичу

И вот если в вашей дате, пришедшей с сервера, обнаруживается буква Z на конце или часовой сдвиг, как в примере выше, никакая конвертация даты на клиенте не нужна!

Достаточно создать объект даты из полученной строки:

const localDate = new Date('2020-08-31T12:27:43Z'); //Mon Aug 31 2020 15:27:43 GMT+0300 (Moscow Standard Time)

localDate уже и будет содержать верную дату, с учетом вашего часового пояса. Создание new Date() из строки формата ISO 8601 все сделает за вас.

Возможно это сэкономит вам немного времени.

Рассказать друзьям

Понравилась статья? Лучший способ сказать спасибо - поделиться ссылкой в социальных сетях: