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');
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
Bearbeitet, sollte jetzt korrekt sein! –
Vielen Dank für Ihre ausführliche Antwort Aakash! – BaconJuice