2014-01-15 3 views
21

Я пытаюсь настроить время, используя смещение часового пояса и временную метку UTC.Moment.Js: Даты смещения с использованием UTC и смещения временной зоны

Я бегу следующий код:

var date = { 
    utc: '2013-10-16T21:31:51', 
    offset: -480 
} 

var returnDate = moment(date.utc).utc().zone(date.offset).format('MM/DD/YYYY h:mm A'); 

Что я ожидаю это: 10/16/2013 1:31 PM, но я в конечном итоге с 10/17/2013 9:31 AM

+0

Что дата выглядеть, если вы удалите '.utc() зону (date.offset)'.? Таким образом, вы вызываете на нем только '.format()'. –

+0

Кроме того, если посмотреть на документацию [здесь] (http://momentjs.com/docs/#/parsing/string-format/) и немного прокрутить вниз. Он гласит: «Если вы не укажете смещение часового пояса, разбор строки приведет к созданию даты в текущем часовом поясе». –

+0

Я опубликовал плохие данные, позвольте мне исправить это. sec – Neil

ответ

16

Вот то, что работает для меня:

var date = { 
    utc: '2013-10-16T21:31:51', 
    offset: 480 
} 

var returnDate = moment.utc(date.utc).zone(date.offset).format('MM/DD/YYYY h:mm A'); 

Если вы заметили, я изменил смещение на положительное число. Это дало желаемый результат. Если смещение оставлено на -480, выход был 10/17/2013 5:31 AM.

Метод moment#UTC, который инициализирует дату как UTC по местному времени.

+4

Для того, чтобы наткнуться на это сообщение, вы можете использовать строку для 'offset', которая, возможно, более разборчива:' zone ('- 07:00') '(пример PST) – potench

+1

' moment.zone() 'устарел после момента 2.9.0 – theChinmay

+5

метод zone() устарел, каждый должен использовать utcOffset() вместо этого, см. Здесь https://github.com/moment/moment/issues/1779 – medBo

2

Я использую библиотеку jsTimezoneDetect, чтобы определить имя часового пояса вместо смещения.

Затем используйте это на UTC метки времени:

timestamp = moment.tz(timestamp, tz.name()); 
timestamp.format('MM/DD/YYYY h:mm A'); 
Смежные вопросы