Это сложная тема. Из того, что я понял, часовой пояс не встроен как часть объекта Date при его создании. Вы также не можете установить часовой пояс для объекта Date. Однако есть смещение часового пояса, которое вы можете получить из объекта Date, который определяется настройками хост-системы пользователя (часового пояса). Думайте о часовом поясе как о способе определения смещения от UTC.
Чтобы облегчить жизнь, я настоятельно рекомендую moment
и moment-timezone
для обработки этих вещей. Moment создает объект-оболочку для Date
с хорошим API для всех видов вещей.
Если существующий объект даты предоставляется вам через какой-либо параметр или что-то еще, вы можете передать его конструктору при создании объекта момента, и вы готовы к работе. На этом этапе вы можете использовать moment-timezone
, чтобы угадать имя часового пояса пользователя, а затем использовать форматирование момента-часового пояса , чтобы получить сокращение для часового пояса. Рискну сказать, что у большинства пользователей часовой пояс устанавливается автоматически, но вы не должны полагаться на это для 100% точности. При необходимости вы также можете установить часовой пояс, который хотите использовать, вручную, прежде чем выбирать нужный формат.
Как правило, при работе с датой и временем лучше сохранять UTC в вашей базе данных, а затем использовать момент js для форматирования времени для часового пояса пользователя при его отображении. В некоторых случаях необходимо убедиться, что часовой пояс правильный. Например, если вы позволяете пользователю запланировать что-то на определенную дату и время. Вы должны быть абсолютно уверены, что с пользователем на западном побережье вы устанавливаете часовой пояс PDT / PST перед преобразованием в UTC для хранения в вашей базе данных.
Относительно сокращения часового пояса ...
Вот базовый пример для получения сокращения часового пояса, используя момент и момент-часовой пояс.
// if all you need is the user's timezone abbreviation you don't even need a date object.
const usersTimezoneName = moment.tz.guess()
const timezoneAbbr = moment().tz(usersTimezoneName).format('z')
console.log(timezoneAbbr) // PST (depending on where the user is)
// to manually set the timezone
const newYorkAbbr = moment(dateObj).tz('America/New_York').format('z')
console.log(newYorkAbbr) // EST
Для отображения определенного объекта даты со смещениями для определенного часового пояса вы можете сделать это.
const xmas = new Date('December 25, 2017 16:20:00')
const losAngelesXmas = moment(xmas).tz('America/Los_Angeles')
console.log(losAngelesXmas.format("dddd, MMMM Do YYYY, h:mm:ss a")) // Monday, December 25th 2017, 4:20:00 pm