Изменить часовой пояс момента, не отражающий на .toDate ()

Ngx Bootstrap Datepicker возвращает объект JS Date.
У меня есть настраиваемое средство выбора времени, которое возвращает строку в формате HH:mm.

Что мне нужно сделать прямо сейчас, так это создать объект JS Date с выбранной датой, выбранным временем и определенным часовым поясом.
Я пытаюсь использовать момент (потому что мы используем его для дат во всем приложении), но у меня не было ожидаемого поведения.

Я пытаюсь:

const specificMoment = moment.tz(date, timeZone); // date is the Ngx Bootstrap selected date
specificMoment.set('hour', +time.split(':')[0]); // time is HH:mm string
specificMoment.set('minute', +time.split(':')[1]);
return specificMoment.toDate

* timeZone изменяется в зависимости от пользователя, а не из-за его браузера, это атрибут пользователя, поэтому я не могу установить moment.tz.setDefault(...);.

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

Почему это работает так и какая будет рабочая реализация для того, что мне нужно?

Ps: console.log(specificMoment.format()); также возвращает неправильный часовой пояс 2018-12-20T23:00:30-02:00.

РЕДАКТИРОВАТЬ
Оказывается, используется
const specificMoment = moment(date).tz(timeZone);
, а затем
return specificMoment.toDate()
"работает". Он возвращает объект Date с 2018-12-21T05:00:00.323-0200, который является датой с указанным часовым поясом (GMT -8: 00), но отображается в моем текущем часовом поясе (GMT -2: 00).
Данные правильно хранятся в моей БД.
Может кто-нибудь объяснить почему?

Спасибо.


person João Ghignatti    schedule 20.12.2018    source источник
comment
Объекты даты не могут находиться в определенном часовом поясе. В моменте нет волшебства. Вы можете создать строку с правильным часовым поясом с помощью функции format, но объекты Date всегда будут внутренне основаны на UTC и будут показывать местное время извне.   -  person Matt Johnson-Pint    schedule 21.12.2018


Ответы (1)


Похоже, вы не установили момент-часовой пояс с какими-либо данными о часовом поясе для использования. Перейдите по этой ссылке на Загрузка данных в momentjs.

Я создал JS Bin для вашего примера, который показывает, как использовать загрузку данных. Проверьте это здесь. например

moment.tz.add([
    'America/Los_Angeles|PST PDT|80 70|0101|1Lzm0 1zb0 Op0',
    'America/New_York|EST EDT|50 40|0101|1Lz50 1zb0 Op0'
]);
person rkatka    schedule 20.12.2018