Давайте на минуточку вспомним то, что все и так знают. Дата в 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 все сделает за вас.
Возможно это сэкономит вам немного времени.
Именно время практичнее конвертнуть ещё на сервере, через тот же php например.
Вполне возможен вариант что у посетителя сайта в браузере будет отключен джаваскрипт.
отключен js, это в 2020-то? в век спа и толстого клиента? сомнительно как-то