testing in the node console:
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()
why isnt native the same timestamp as withMoment? why does withMoment return the timestamp calculated from the current local-time? how can i achieve that moment.utc() returns the same as Date.UTC()?
Call moment.utc()
the same way you're calling Date.UTC
:
var withMoment = moment.utc([now.getFullYear(), now.getMonth(), now.getDate(), now.getHours(), now.getMinutes(), now.getSeconds()]).valueOf();
I think calling moment.utc(now)
will make it assume now
lives in the local timezone, and it will convert it to UTC first, hence the difference.
timrwood
What you are doing is essentially this.
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
Because now
is constructed in the current timezone and native
is constructed in UTC, they will differ by your offset. 11 AM PST != 11 AM GMT.
来源:https://stackoverflow.com/questions/15133326/moment-js-utc-does-not-work-as-i-expect-it