moment.js - UTC не работает, как я ожидаю

тестирование в консоли узла:

var moment = require('moment');

// create a new Date-Object
var now = new Date(2013, 02, 28, 11, 11, 11);

// create the native timestamp
var native = Date.UTC(now.getFullYear(), now.getMonth(), now.getDate(), now.getHours(), now.getMinutes(), now.getSeconds());

// create the timestamp with moment
var withMoment = moment.utc(now).valueOf()
// it doesnt matter if i use moment(now).utc().valueOf() or moment().utc(now).valueOf()

// native: 1364469071000
// withMoment: 1364465471000
native === withMoment // false!?!?! 

// this returns true!!!
withMoment === now.getTime()

почему родная метка времени не такая же, как у withMoment? почему withMoment возвращает отметку времени, рассчитанную по текущему местному времени? как я могу добиться того, что moment.utc() возвращает то же самое, что и Date.UTC()?


person hereandnow78    schedule 28.02.2013    source источник


Ответы (2)


Позвоните moment.utc() так же, как вы звоните Date.UTC:

var withMoment = moment.utc([now.getFullYear(), now.getMonth(), now.getDate(), now.getHours(), now.getMinutes(), now.getSeconds()]).valueOf();

Я думаю, что вызов moment.utc(now) заставит предположить, что now живет в местном часовом поясе, и сначала преобразует его в UTC, отсюда и разница.

person robertklep    schedule 28.02.2013
comment
уже попробовал это и увидел, что это работает. это единственный вариант, который у меня есть? думал, что moment.js экономит мне код и время ;-( - person hereandnow78; 28.02.2013
comment
Вы можете передать native в moment.utc() вместо now, это тоже сработает. - person robertklep; 28.02.2013
comment
да, все еще не то, что я хотел, но ты ;-) - person hereandnow78; 28.02.2013
comment
Чувак, ты спас мой день. Пожалуйста, выпейте пива и пришлите мне счет. - person adripanico; 04.10.2016

То, что вы делаете, по существу это.

var now    = new Date(2013, 02, 28, 11, 11, 11);
var native = Date.UTC(2013, 02, 28, 11, 11, 11);

console.log(now === utc); // false
console.log(now - utc); // your offset from GMT in milliseconds

Поскольку now построен в текущем часовом поясе, а native построен в UTC, они будут отличаться вашим смещением. 11:00 по тихоокеанскому стандартному времени != 11:00 по Гринвичу.

person timrwood    schedule 28.02.2013