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, не охватывают преобразования часового пояса.

Другие вопросы по тегам