Moment.js отличается между датами UTC
Я использую moments.js для работы с датами в javascript. Все даты указаны в формате UTC (или должны быть).
У меня есть следующая дата (60 минут от текущего времени):
//Wed, 04 Apr 2012 21:09:16 GMT
to = moment.utc().add('m', 60).toDate();
Теперь я хочу получить разницу между секундами между этой датой и текущим временем и временем UTC, поэтому я:
seconds = moment.utc().diff(to, 'seconds');
Это возвращает 10800
вместо 3600
, поэтому на 3 часа вместо одного.
Любые идеи, что я делаю неправильно?
Спасибо!
EDIT:
Я обновил строку до seconds = moment().diff(to, 'seconds');
, и она вернет секунды, но она -3600
вместо положительной.
EDIT:
Теперь у меня есть эти два моментальных объекта:
{ _d: Thu, 05 Apr 2012 17:33:18 GMT, _isUTC: true }
{ _d: Thu, 05 Apr 2012 16:38:45 GMT, _isUTC: true }
d1 и d2.
Когда я делаю d1.diff(d2, 'hours', true);
, это возвращает 4
. Это определенно связано с UTC, я думаю, но, похоже, это должно сработать.
Ответы
Ответ 1
Это законная ошибка. Я просто зарегистрировал его здесь: https://github.com/timrwood/moment/issues/261
Чтобы обойти это, используйте вместо этого следующее.
var a = moment.utc().add('m', 60).toDate(),
b = moment().diff(to, 'seconds'); // use moment() instead of moment.utc()
Кроме того, если вам нужно получить toString
даты, вы можете использовать moment().toString()
, поскольку он прокси-сервер к обернутому Date().toString()
Ответ 2
Могут быть часовые пояса, потому что вы используете toDate()
. Попробуйте просто работать непосредственно с моментом (т.е. Изменить его на to = moment.utc().add('m', 60);
).