Давайте на минуточку вспомним то, что все и так знают. Дата в 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 все сделает за вас.
Возможно это сэкономит вам немного времени.
Leave a Reply