Für einen oData Rest-Dienst verwende ich Moment.js, um ein Datum aus einem Unix-Zeitstempel zu erstellen, und ich möchte die Zeitzone ignorieren. Mein Datum ist "2013-12-24", das ist 1387839600 in Unix Sekunden.
Verwenden Sie
%Vor%ergibt "2013-12-23T23: 00: 00.000Z", da ich in GMT + 1 lebe. Durch die Verwendung von
%Vor%Ich bekomme "2013-12-24T00: 00: 00.000Z" was genau ich möchte. Ich kann einfach Zulus Zeit "Z" am Ende entfernen.
Aber die reale Darstellung meines Datums ist ein Unix-Zeitstempel. Also wenn ich das tue
%Vor%Ich bekomme immer "2013-12-23T23: 00: 00.000Z", aber ich möchte, dass es "2013-12-24T00: 00: 00.000Z" zurückgibt.
Wo ist meine Schuld? Danke für Ihre Hilfe!
Unix-Zeitstempel, egal ob in Sekunden oder Millisekunden, sind immer in UTC. Der Wert 1387839600
ist tatsächlich 2013-12-23 um 11:00 UTC. Verwenden Sie Websites wie diese , um dies zu überprüfen.
Wenn Sie möchten, dass es 2013-12-24 um Mitternacht UTC ist, wäre der Zeitstempel 1387843200
.
So verhält sich der Moment richtig. Sie sollten sich stattdessen auf Ihre Rest-API konzentrieren und sicherstellen, dass sie korrekt UTC und nicht einen lokalen Zeitwert ausgibt.
Wenn Sie nur den Datumsteil möchten, dann verwenden Sie nicht .toISOString
. Verwenden Sie stattdessen .format
wie:
Sie können Ihr eigenes Format erstellen. Alle Zeichenfolgen, die kopiert werden müssen, wie sie sind (nicht interpoliert), sollten in Klammern enthalten sein.
In Ihrer Situation sollte das funktionieren:
%Vor%Nach dem Anpassen der onChange-Funktion wie
<DateTimeField mode="date" inputFormat='MM-DD-YYYY' onChange= {this.onChange} />
Die onChange-Funktion kann folgendermaßen aussehen:
onChange: function(value) {
console.log({myDate: moment.utc(value, 'x').format('YYYY-MM-DDTHH:mm:ss.SSSZ')});
},
Es scheint, dass der onChange-Wert als Unix-ms-Zeitstempel (x) anstelle des Unix-Zeitstempels (X) erscheint, falls das jemals verwirrend sein sollte.
Dies sollte eine Zeichenfolge wie 2015-07-15T15:02:00.000+00:00
Tags und Links javascript datetime date momentjs