2013-02-28 12 views
7

testowania w konsoli węzła:moment.js - UTC nie działa jak mam się go spodziewać

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

dlaczego isnt natywną ten sam znacznik czasu jako withMoment? dlaczego withMoment zwraca znacznik czasu obliczony z bieżącego czasu lokalnego? jak mogę osiągnąć ten moment.utc() zwraca to samo co Date.UTC()?

Odpowiedz

11

połączeń moment.utc() taki sam sposób dzwonisz Date.UTC:

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

myślę nazywając moment.utc(now) pozwoli zakładać now życie w lokalnej strefy czasowej, a to będzie przekształcić go na UTC pierwszy, stąd różnica .

+1

już wypróbował to i zobaczył, że to działa. czy to jedyna opcja, którą mam? think moment.js zapisuje mi kod i czas ;-( – hereandnow78

+0

Możesz przekazać 'native' do' chwili.utc() 'zamiast' teraz', to też zadziała. – robertklep

+0

Tak, nadal nie to, co chciałem, ale ty ;-) – hereandnow78

3

To, co robisz, jest w zasadzie tym.

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 

Ponieważ now jest skonstruowany w obecnej strefy czasowej i native zbudowany jest w UTC, będą różnić się o swoje offset. 11 AM PST! = 11:00 GMT.

Powiązane problemy