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 — «Дата», определенный в схеме мангуста следующим образом:

,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...

Что я делаю не так?


person j-p    schedule 04.03.2018    source источник


Ответы (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/

Локализации, предоставляемые базовым moment.js, не охватывают преобразование часовых поясов.

person kshetline    schedule 04.03.2018