2017-09-20 3 views
1

Ich versuche, den gleichen Wert wie 1502755200000 mit momentjs momentjsKonvertieren von Jahr, Monat, Tag Unix-Zeitstempel

console.log(Date.UTC(2017, (8-1), 15));//1502755200000 

var newDate = moment(); 
newDate.set('year', 2017); 
newDate.set('month', 7); // April 
newDate.set('date', 15); 

console.log(newDate.format('X'));//1502818350 

jedoch zu erhalten, wenn ich den miliseconds ich 1502818350 Jede Idee versuchen, wie das bekommen Genau der gleiche Zeitstempel wie oben?

Dies ist die Geige https://jsfiddle.net/cdvzoezb/1/

Antwort

3

Erstens .format('X') Sie den Unix-Zeitstempel in Sekunden gibt, nicht Millisekunden. Um Millisekunden zu erhalten, müssen Sie .format('x') (Kleinbuchstabe x) verwenden.

Zweitens, wenn Sie moment() verwenden, gibt es Ihnen ein Moment Datum Objekt an Ihrem aktuellen lokalen Zeit, nicht UTC Zeit. Also, wenn Sie es mit .set('date', 15) usw. ändern, stellen Sie es auf 15. April 2017 in Ihrer lokalen Zeit. Das ist der Grund, warum Sie den ganz anderen Wert bekommen.

Um ein Momentdatenobjekt für die aktuelle UTC-Zeit zu erhalten, verwenden Sie moment.utc().

Drittens wird das von Ihnen erstellte Date-Objekt zur Zeit 00: 00: 00.000 sein, während das Moment-Objekt für die aktuelle Zeit ist. Wenn Sie also Jahr/Monat/Datum einstellen, bleibt die Zeit bei der Erstellung des Objekts erhalten. Sie müssen die Zeit des Momentobjekts auf 00: 00: 00.000 einstellen.

Dies kann mit der .startOf('day') Funktion durchgeführt werden.

Fazit:

console.log(Date.UTC(2017, (8-1), 15)); //1502755200000 

var newDate = moment.utc(); 
newDate.set('year', 2017); 
newDate.set('month', 7); 
newDate.set('date', 15); 
newDate.startOf('day'); 

console.log(newDate.format('x')); //1502755200000 

Oder viel kürzer:

var newDate = moment.utc('2017-07-15 00:00:00.000'); 
+0

Hey Aakash, danke für die Erklärung! Ich habe deinen Code auf einer Geige https://jsfiddle.net/fuxmbga2/ ausgeführt und bekomme immer noch einen anderen Zeitstempel. Irgendeine Idee warum? – BaconJuice

+0

Bearbeitet, sollte jetzt korrekt sein! –

+0

Vielen Dank für Ihre ausführliche Antwort Aakash! – BaconJuice

0

Nun können Sie einfach einen Moment erstellen Objekt aus einer Date Instanz und dann mit den utc() den Zeitstempel in UTC zu konvertieren. Danach können wir Momente Methode format() zu erhalten Millisekunden mit der x Anzeigeoption wie so verwenden:

console.log("=============="); 
console.log(Date.UTC(2017, (8-1), 15)); 
var base = Date.UTC(2017, (8-1), 15) 
var newDate = moment(base); 

console.log('a', newDate.utc().format('x')); //1502755200000 
+0

Dies schließt nicht die Frage beantworten. Der Fragesteller wollte wissen, warum sein "Moment" -Objekt nicht den gleichen Zeitstempel wie das Äquivalent "Datum" liefert. –

Verwandte Themen