Angular2-момент, MongoDB UTC время
Я хочу отобразить только дату 29 июня 1967 года - но она возвращается к моему угловому приложению как 1967-06-28 19:00:00.000 - так что оно естественно отображается 28 июня 1967 года.
Селектор даты в моей HTML-форме - выбрано: 29.06.1967
Форма отправлена ...
MongoDB показывает: 1967-06-28 19:00:00.000
Я в центральной TZ, так что это имеет смысл как хранилище в UTC.
Тип данных Mongo - "Date", определенный в схеме mongoose следующим образом:
,dob: {
type: Date
,required: false
,default: null
}
Чтобы сделать конвертацию в браузере, я установил angular2-moment, поскольку он "рекламировал" функцию для выполнения этой задачи. Я не получаю ошибку - но я не получаю никаких изменений в отображении.
DOB: {{user.dob | date:'mediumDate' }}
DOB: {{user.dob| amLocal | amDateFormat: 'MMM DD, YYYY'}}
ОБА дисплей
Jun 28, 1967
По иронии судьбы - поле даты формы редактирования, отображает 29.06.1967...
Что я делаю неправильно?
1 ответ
Если вы добавите "Z" к концу времени, это гарантирует, что он будет проанализирован как UTC, например так:
1967-06-28 19:00:00.000Z
Проблема заключается в том, что если вы обрабатываете входные данные из вашей БД как UTC, вы в конечном итоге окажетесь на девять часов позже 06-29, вместо того, чтобы поворачивать дату / время вперед. Поэтому может показаться, что ваши метки времени БД на самом деле отстают от UTC на несколько часов.
Я в восточном стандартном времени, и это занимает следующее:
new Date(Date.parse('1967-06-28 19:00:00.000 GMT-0900'))
... чтобы получить это:
Thu Jun 29 1967 00:00:00 GMT-0400 (EDT)
Кстати, если вы хотите иметь возможность конвертировать что-либо, кроме фиксированного смещения UTC, в местное время вашей клиентской системы, вам понадобится: https://momentjs.com/timezone/
Локализации, предоставляемые базовым моментом.js, не охватывают преобразования часового пояса.