2016-07-30 23 views
0

Ich versuche, eine Datumszeichenfolge zu analysieren und die entsprechende Unix-Zeit bis Mitternacht am Anfang des Datums in der UTC-Zone zurückzugeben . Jedoch gibt meine node.js die unixtime zu Beginn dieses Datums in MY Zeitzone zurück.Parsing Daten in node.js: moment.utc() gibt nicht die richtige UTC-Unix-Zeit

Was mache ich falsch? Dies sollte 1440633600 auf die Konsole drucken, aber es wird eine Zahl gedruckt, die der Unix-Zeit in meiner Zeitzone entspricht, nicht UTC.

var moment = require('moment'); 
    var datestring = "August 27 2015"; 
    var unixDate = new Date(datestring); 
    var myDate = moment.utc(unixDate); 
    console.log(myDate.format('X')); 

„Datestring“ wird nicht immer enthält ein „Z“ am Ende (die UTC zeigt), aber es könnte manchmal, so kann ich nicht nur ein „Z“ vor Parsen hinzuzufügen. Es muss etwas sein, ich bin fehlt hier ...

Antwort

1

TL; DR:

var myDate = moment.utc(datestring, 'MMMM DD YYYY');

Die Erklärung:

var unixDate = new Date(datestring); mit datestring Satz "August 27 2015" wird unixDate gesetzt zu dem Zeitstempel, der Mitternacht am 27. August 2015 in Ihrer Zeitzone entspricht.

Anschließend var myDate = moment.utc(unixDate) setzt myDate zu einem moment Objekt auf die gleiche Zeit festgelegt. Da Sie ihm einen Zeitstempel und kein Datum senden, gibt es keinen Grund, die Zeitzone anzupassen. Da Sie den Zeitstempel basierend auf der Zeit in Ihrer Zeitzone generiert haben, sieht das moment.

Eine Lösung besteht darin, diese Zeile in var myDate = moment.utc(datestring, 'MMMM DD YYYY'); zu ändern. Da moment eine zu verarbeitende Zeichenfolge anstelle eines UNIX-Zeitstempels erhält, wählt sie am 27. August 2015 Mitternacht in UTC aus.