2013-02-28 9 views
7

Tests in der Knoten Konsole erwarten:moment.js - UTC nicht funktioniert, wie ich es

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() 

warum ist nicht nativer der gleiche Zeitstempel wie withMoment? Warum gibt withMoment den aus der aktuellen Ortszeit berechneten Zeitstempel zurück? Wie kann ich dieses Moment erreichen? .utc() gibt dasselbe wie Date.UTC() zurück?

Antwort

11

Anruf moment.utc() auf die gleiche Weise Date.UTC sind anrufen:

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

ich moment.utc(now) denken Aufruf wird es now Leben in der lokalen Zeitzone machen übernehmen, und es wird es zunächst, also die Differenz zu UTC konvertieren .

+1

bereits versucht, und sah, dass es funktioniert. Ist das die einzige Option, die ich habe? dachte moment.js spart mir Code und Zeit ;-( – hereandnow78

+0

Sie können "native" zu 'moment.utc()' anstelle von 'now' übergeben, das funktioniert auch. – robertklep

+0

yeah, immer noch nicht das, was ich wollte, aber ty ;-) – hereandnow78

3

Was Sie tun, ist im Wesentlichen das.

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 

Da now in der aktuellen Zeitzone aufgebaut und native wird in UTC konstruiert, werden sie von Ihrem Offset unterscheiden. 11 Uhr PST! = 11 Uhr GMT.