2016-05-20 2 views
0

У меня есть даты, сохраненные в mongodb в формате UTC, например. "2016-01-28T00: 00: 00.000Z". В клиенте я использую moment.js для форматирования даты. Тем не менее, когда я создал момент этой конкретной даты, летнее время вступает в игру:Дата UTC с разных летних дневных скоростей с поправкой на текущий часовой пояс

>moment("2016-01-28T00:00:00.000Z").format()

"2016-01-27T19: 00: 00-05: 00"

Если я использую часовой пояс момента, чтобы отрегулировать это время, он не будет работать, потому что смещение -4 на данный момент, а не -5. Каков правильный способ настроить это время, так что вместо 1/27/16 я получаю 1/28/16, чего я хочу. На данный момент одно решение я, хотя о том, что, чтобы получить .utcOffset в течение нескольких минут и добавьте к этому моменту моего времени:

moment("2016-01-28T00:00:00.000Z").add( -moment("2016-01-28T00:00:00.000Z").utcOffset(),'minutes').format()

«2016-01-28T00: 00: 00-05: 00 "

Однако я не уверен, что это лучший способ сделать это.

+0

У вас есть смещение на вашем входе ('Z', что для UTC и эквивалентно' +00: 00'). См. Ответ в сообщении dup, чтобы понять, как использовать функцию parseZone для ее сохранения, или функцию 'utc' для использования только UTC. –

ответ

0

Ознакомьтесь со спецификацией для ISO 8601, в частности, вокруг указателей часового пояса.

«Z» в конце отформатированной входной строки обозначает число как находящееся в часовой пояс UTC. Библиотека moment принимает дату UTC и автоматически преобразует ее в локальный часовой пояс, что в вашем случае означает вычитание нескольких часов.

Если вы выберете «Z», то moment будет интерпретировать его как «неопределенный» часовой пояс и не будет добавлять или вычитать любое время из данного времени. Так, обратите внимание:

> moment("2016-01-28T00:00:00.000Z").format() 
< "2016-01-27T19:00:00-05:00" 
> moment("2016-01-28T00:00:00.000").format() 
< "2016-01-28T00:00:00-05:00" 

После удаления «Z», moment все еще форматировать новую дату с -05:00 как часовой пояс целеуказателем, но не изменит DateTime.

+0

Простите, но это не очень хорошая идея. Хотя это может дать то же значение * местного времени *, вы фактически изменили намерение метки времени, поставив ее в другой момент времени. См. Ответ в ссылке dup для правильного подхода. –