О 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 все сделает за вас.

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

Comments

2 responses to “О DateTime в UTC замолвите слово”

  1. Программист из Японии Avatar

    Именно время практичнее конвертнуть ещё на сервере, через тот же php например.
    Вполне возможен вариант что у посетителя сайта в браузере будет отключен джаваскрипт.

    1. Ольга Фомина Avatar

      отключен js, это в 2020-то? в век спа и толстого клиента? сомнительно как-то

Leave a Reply

Your email address will not be published. Required fields are marked *