Meine Datumsobjekte in JavaScript werden immer durch UTC +2 dargestellt, da ich mich dort befinde. Daher so
Mon Sep 28 10:00:00 UTC+0200 2009
Problem ist die JSON.stringify
Konvertierung des oben genannten Datums in
2009-09-28T08:00:00Z (notice 2 hours missing i.e. 8 instead of 10)
Was ich brauche, ist, dass Datum und Uhrzeit eingehalten werden, aber es ist nicht so, daher sollte es so sein
2009-09-28T10:00:00Z (this is how it should be)
Grundsätzlich benutze ich das:
var jsonData = JSON.stringify(jsonObject);
Ich habe versucht, einen Ersetzerparameter (zweiter Parameter bei stringify) zu übergeben, aber das Problem ist, dass der Wert bereits verarbeitet wurde.
Ich habe auch versucht mit toString()
und toUTCString()
am Tag Objekt, aber diese geben Sie mir nicht , was ich entweder will ..
Kann mir jemand helfen?
javascript
json
datetime
utc
Mark Smith
quelle
quelle
2009-09-28T10:00:00Z
repräsentiert nicht den gleichen Zeitpunkt wieMon Sep 28 10:00:00 UTC+0200 2009
. Das DatumZ
in ISO 8601 bedeutet UTC, und 10 Uhr in UTC ist ein anderer Zeitpunkt als 10 Uhr in +0200. Es wäre eine Sache, wenn das Datum mit der richtigen Zeitzone serialisiert werden soll, aber Sie bitten uns, Ihnen bei der Serialisierung zu einer Darstellung zu helfen, die eindeutig und objektiv falsch ist .Antworten:
Vor kurzem bin ich auf das gleiche Problem gestoßen. Und es wurde mit dem folgenden Code gelöst:
quelle
JSON verwendet die
Date.prototype.toISOString
Funktion, die keine Ortszeit darstellt - sie stellt die Zeit in unveränderter UTC dar. Wenn Sie sich Ihre Datumsausgabe ansehen, sehen Sie, dass Sie sich in UTC + 2 Stunden befinden. Aus diesem Grund ändert sich die JSON-Zeichenfolge um zwei Stunden. Wenn dies jedoch ermöglicht, dass dieselbe Zeit in mehreren Zeitzonen korrekt dargestellt wird.quelle
Denken Sie nur zur Veranschaulichung daran, dass das letzte "Z" in "2009-09-28T08: 00: 00Z" bedeutet, dass die Zeit tatsächlich in UTC ist.
Weitere Informationen finden Sie unter http://en.wikipedia.org/wiki/ISO_8601 .
quelle
Hier ist eine andere Antwort (und ich persönlich halte es für angemessener)
quelle
date.toJSON () druckt das UTC-Datum in einen formatierten String (fügt also den Offset hinzu, wenn es in das JSON-Format konvertiert wird).
quelle
date.getTime()
Gibt die Zeit in Millesekunden zurück, daher sollten wir auch den zweiten Operanden in Millisekunden konvertieren. Da diedate.getTimezoneOffset()
Rückgabe in Minuten versetzt ist, multiplizieren wir sie mit 60000, da 1 Minute = 60000 Millisekunden. Durch Subtrahieren des Versatzes von der aktuellen Zeit erhalten wir die Zeit in UTC.Sie können moment.js verwenden, um mit der Ortszeit zu formatieren:
quelle
Ich bin etwas spät dran, aber Sie können die toJson-Funktion bei einem Date mit Prototype wie folgt jederzeit überschreiben:
In meinem Fall gibt Util.getDateTimeString (this) einen String wie den folgenden zurück: "2017-01-19T00: 00: 00Z"
quelle
Normalerweise möchten Sie, dass jedem Benutzer Daten in seiner eigenen Ortszeit angezeigt werden.
Deshalb verwenden wir GMT (UTC).
Verwenden Sie Date.parse (jsondatestring), um die lokale Zeitzeichenfolge abzurufen.
es sei denn, Sie möchten , dass jedem Besucher Ihre Ortszeit angezeigt wird.
Verwenden Sie in diesem Fall die Methode von Anatoly.
quelle
Ich habe dieses Problem mithilfe der
moment.js
Bibliothek (der Nicht-Zeitzonen-Version) umgangen.Ich habe die
flatpickr.min.js
Bibliothek benutzt. Die Uhrzeit des resultierenden erstellten JSON-Objekts entspricht der angegebenen Ortszeit, jedoch der Datumsauswahl.quelle
Out-of-the-Box-Lösung zum Erzwingen des
JSON.stringify
Ignorierens von Zeitzonen:Verwenden der Bibliothek moment.js:
quelle
Ich habe ein bisschen Probleme damit, mit Legacy-Sachen zu arbeiten, bei denen sie nur an der Ostküste der USA arbeiten und keine Daten in UTC speichern, es ist alles EST. Ich muss die Daten basierend auf Benutzereingaben im Browser filtern, um das Datum in der Ortszeit im JSON-Format zu übergeben.
Nur um auf diese bereits veröffentlichte Lösung einzugehen - das ist, was ich benutze:
Ich verstehe also, dass dies vor sich geht und die Zeit (in Millisekunden (also 60000)) vom Startdatum basierend auf dem Zeitzonenversatz (Rückgabe von Minuten) subtrahiert - in Erwartung der Hinzufügung von Zeit zu JSON ().
quelle
Hier ist etwas wirklich Ordentliches und Einfaches (zumindest glaube ich das :)) und erfordert keine Manipulation des Datums, um geklont zu werden oder eine der nativen Funktionen des Browsers wie toJSON zu überladen (Referenz: Wie JSON ein Javascript-Datum stringifiziert und die Zeitzone beibehält, höflicher Shawson)
Übergeben Sie eine Ersetzungsfunktion an JSON.stringify, die Dinge nach Herzenslust anordnet !!! Auf diese Weise müssen Sie keine Stunden- und Minutenunterschiede oder andere Manipulationen vornehmen.
Ich habe in console.logs Zwischenergebnisse eingefügt, damit klar ist, was los ist und wie die Rekursion funktioniert. Das zeigt etwas Bemerkenswertes: Der Wertparameter für den Ersatz ist bereits in das ISO-Datumsformat konvertiert :). Verwenden Sie diese [Taste], um mit Originaldaten zu arbeiten.
quelle
JavaScript konvertiert normalerweise die lokale Zeitzone in UTC.
quelle
Alles läuft darauf hinaus, ob Ihr Server-Backend zeitzonenunabhängig ist oder nicht. Ist dies nicht der Fall, müssen Sie davon ausgehen, dass die Zeitzone des Servers mit der des Clients identisch ist, oder Informationen über die Zeitzone des Clients übertragen und diese auch in die Berechnungen einbeziehen.
Ein auf PostgreSQL-Backend basierendes Beispiel:
Der letzte ist wahrscheinlich das, was Sie in der Datenbank verwenden möchten, wenn Sie nicht bereit sind, die Zeitzonenlogik ordnungsgemäß zu implementieren.
quelle
Stattdessen
toJSON
können Sie die Formatierungsfunktion verwenden, die immer das richtige Datum und die richtige Uhrzeit + angibtGMT
quelle
Ich habe das in Winkel 8 versucht:
Modell erstellen:
in Ihrer Komponente
Senden Sie das Datum zum Speichern an Ihre API
Wenn Sie Ihre Daten von der API laden, gehen Sie folgendermaßen vor:
model.YourDate = new Date(model.YourDate+"Z");
Sie erhalten Ihr Datum korrekt mit Ihrer Zeitzone.
quelle