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).
Данные правильно хранятся в моей БД.
Может кто-нибудь объяснить почему?
Спасибо.
format
, но объекты Date всегда будут внутренне основаны на UTC и будут показывать местное время извне. - person Matt Johnson-Pint   schedule 21.12.2018