2016-07-30 7 views
0

Я пытаюсь разобрать строку даты и вернуть соответствующее время unix в полночь в начале даты в зоне UTC , Однако мой node.js продолжает возвращать unixtime в начале этой даты в MY timezone.Синхронизация дат в node.js: moment.utc() не возвращает правильное время UTC unix

Что я делаю неправильно? Это должно печатать 1440633600 на консоли, но оно печатает число, соответствующее времени unix в моем часовом поясе, а не UTC.

var moment = require('moment'); 
    var datestring = "August 27 2015"; 
    var unixDate = new Date(datestring); 
    var myDate = moment.utc(unixDate); 
    console.log(myDate.format('X')); 

«DateString» не всегда будет содержать «Z» в конце (который указывает UTC), но это может иногда, так что я не могу просто добавить «Z» перед разбором. Там должен быть то, что я здесь не хватает ...

ответ

1

TL; DR:

var myDate = moment.utc(datestring, 'MMMM DD YYYY');

Объяснение:

var unixDate = new Date(datestring); с datestring набор для "August 27 2015" установит unixDate к отметке времени, соответствующей полуночи 27 августа 2015 года в вашем часовом поясе.

Впоследствии var myDate = moment.utc(unixDate) устанавливает myDate на объект moment, установленный на то же время. Поскольку вы отправляете ему временную метку, а не дату, у нее нет причин настраивать часовой пояс. Поскольку вы создали временную метку, основанную на времени в вашем часовом поясе, это то, что видит moment.

Одно исправление заключается в том, чтобы изменить эту строку на var myDate = moment.utc(datestring, 'MMMM DD YYYY');. Поскольку moment будет получать строку для обработки, а не временную метку UNIX, она выберет полночь 27 августа 2015 года в формате UTC.

 Смежные вопросы

  • Нет связанных вопросов^_^