как конвертировать дату JavaScript в соответствии с новым часовым поясом - PullRequest
0 голосов
/ 31 октября 2018

Я думал, что справлюсь с этим, но не могу разобраться.

сценарий:
1) пользователь выбирает виджет даты, который возвращает дату в местном часовом поясе, скажем, 10:00 «Австралия / Сидней»

2) Затем пользователь выбирает другой часовой пояс по идентификатору «Австралия / Брисбен» (это другой TZ и может иметь летнее время и т. Д.). Предположим, его + 1 час

.

То, что я хочу сделать, - это иметь функцию, которая принимает объект Date, представляющий [10:00 'Australia / Sydney'], и возвращает мне новую дату, которая представляет [10:00 'Australia / Brisbane], т.е. базовое время UTC будет иметь смещено + 1 час

 function convertToTimezone(date, newTimezone) {

      ... what goes here? ...

      return newDate;
 }

Я бродил с часовым поясом, и я не могу заставить его делать то, что я хочу.

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018

ОК, FWIW, я получил ответ сам. moment.tz не работает, как я себе представлял.

Подводя итог, я хочу взять javascript Date, который имеет время настенного часа, скажем, «10 утра 15 сентября 2018 года», который был связан с определенным идентификатором часового пояса, скажем, BrisabneOz.

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

Я нашел способ сделать это, чтобы получить строку даты настенных часов, убрав, таким образом, любой связанный часовой пояс из уравнения tbe, и используя moment.tz, чтобы создать другой объект даты, используя новый другой часовой пояс. Что он может сделать.

Часть, которая смутила меня, заключалась в том, что мне нужно было перейти к строке в качестве шага - думал, что я могу просто пропустить одно свидание и получить moment.tz, чтобы замаскировать меня на другое свидание аля @Alex Taylor ответ, но на самом деле это не работает.

function convertDateToTimezone(date, timezone) {
    const str = moment(date).format('YYYY-MM-DD HH:mm:ss');
    const tzMoment = moment.tz(str, timezone.identifier)
    return tzMoment.toDate()
}
0 голосов
/ 31 октября 2018

Библиотека moment-timezone должна сделать это тривиальным:

function convertToTimezone(date, newTimezone) {
    return moment(date).tz(newTimezone);
}

Или, если date уже moment:

function convertToTimezone(date, newTimezone) {
    return date.clone().tz(newTimezone);
}

См. Документацию по Преобразование в зону для получения дополнительной информации.

...