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);).