Ich habe so viele verschiedene Standards für das JSON-Datumsformat gesehen:
"\"\\/Date(1335205592410)\\/\"" .NET JavaScriptSerializer
"\"\\/Date(1335205592410-0500)\\/\"" .NET DataContractJsonSerializer
"2012-04-23T18:25:43.511Z" JavaScript built-in JSON object
"2012-04-21T18:25:43-05:00" ISO 8601
Welches ist das richtige? Oder am besten? Gibt es einen Standard dafür?
javascript
json
Kamyar Nazeri
quelle
quelle
strings
,numbers
,true
,false
,null
,objects
Undarrays
Antworten:
JSON selbst nicht , wie Datumsangaben dargestellt werden sollen, JavaScript jedoch.
Sie sollten das Format verwenden, das von
Date
dertoJSON
Methode ausgegeben wird :2012-04-23T18:25:43.511Z
Hier ist der Grund:
Es ist menschlich lesbar, aber auch prägnant
Es sortiert richtig
Es enthält Sekundenbruchteile, mit deren Hilfe die Chronologie wiederhergestellt werden kann
Es entspricht ISO 8601
ISO 8601 ist seit mehr als einem Jahrzehnt international etabliert
ISO 8601 wird von W3C , RFC3339 und XKCD empfohlen
Abgesehen davon kann jede Datumsbibliothek, die jemals geschrieben wurde, "Millisekunden seit 1970" verstehen. Für eine einfache Portabilität ist ThiefMaster also richtig.
quelle
JSON.stringify({'now': new Date()}) "{"now":"2013-10-21T13:28:06.419Z"}"
-
vor den Ziffern kommtASCII
, wird es bis zum Jahr 100.000 gut sortieren. ; PJSON weiß nichts über Daten. Was .NET tut, ist ein nicht standardmäßiger Hack / eine nicht standardmäßige Erweiterung.
Ich würde ein Format verwenden, das leicht in ein
Date
Objekt in JavaScript konvertiert werden kann , dh eines, an das übergeben werden kannnew Date(...)
. Das einfachste und wahrscheinlich portabelste Format ist der Zeitstempel, der seit 1970 Millisekunden enthält.quelle
Es gibt kein richtiges Format ; Die JSON-Spezifikation gibt kein Format für den Austausch von Daten an, weshalb es so viele verschiedene Möglichkeiten gibt.
Das beste Format ist wohl ein Datum, das im ISO 8601-Format dargestellt wird ( siehe Wikipedia ). Es ist ein bekanntes und weit verbreitetes Format und kann in vielen verschiedenen Sprachen verarbeitet werden, wodurch es sich sehr gut für die Interoperabilität eignet. Wenn Sie beispielsweise die Kontrolle über den generierten JSON haben, stellen Sie Daten anderen Systemen im JSON-Format zur Verfügung. Die Auswahl von 8601 als Datumsaustauschformat ist eine gute Wahl.
Wenn Sie beispielsweise keine Kontrolle über das generierte JSON haben, sind Sie der Konsument von JSON aus mehreren vorhandenen Systemen. Die beste Möglichkeit, dies zu handhaben, besteht darin, eine Dienstprogrammfunktion zur Datumsanalyse zu verwenden, um die verschiedenen erwarteten Formate zu verarbeiten.
quelle
Aus RFC 7493 (Das I-JSON-Nachrichtenformat) :
I-JSON steht entweder für Internet JSON oder Interoperable JSON, je nachdem, wen Sie fragen.
quelle
Date().toISOString()
undDate().toJSON()
mit der Einschränkung erzeugt wird , dassDate
kein Zeitzonenwert verfolgt wird und daher immer die Zeitstempel in der UTC (Z
) - Zeitzone ausgegeben werden. Der Wert kann mitnew Date("...")
und analysiert werdenDate.parseDate
.Nur als Referenz habe ich dieses Format verwendet gesehen:
Es funktioniert mit JSONP, das von der
$.getJSON()
Funktion unterstützt wird . Ich bin mir nicht sicher, ob ich diesen Ansatz empfehlen würde ... wirf ihn einfach als Möglichkeit raus, weil die Leute es so machen.FWIW: Verwenden Sie niemals Sekunden seit der Epoche in einem Kommunikationsprotokoll oder Millisekunden seit der Epoche, da diese dank der zufälligen Implementierung von Schaltsekunden mit Gefahren behaftet sind (Sie haben keine Ahnung, ob Sender und Empfänger UTC-Schaltsekunden ordnungsgemäß implementieren).
Eine Art Haustierhass, aber viele Leute glauben, dass UTC nur der neue Name für GMT ist - falsch! Wenn Ihr System keine Schaltsekunden implementiert, verwenden Sie GMT (oft als UTC bezeichnet, obwohl es falsch ist). Wenn Sie Schaltsekunden vollständig implementieren, verwenden Sie tatsächlich UTC. Zukünftige Schaltsekunden können nicht bekannt sein. Sie werden bei Bedarf von der IERS veröffentlicht und müssen ständig aktualisiert werden. Wenn Sie ein System ausführen, das versucht, Schaltsekunden zu implementieren, aber eine veraltete Referenztabelle enthält (häufiger als Sie vielleicht denken), haben Sie weder GMT noch UTC. Sie haben ein Wonky-System, das vorgibt, UTC zu sein.
Diese Datumszähler sind nur kompatibel, wenn sie in einem aufgeschlüsselten Format (y, m, d usw.) ausgedrückt werden. Sie sind NIEMALS in einem Epochenformat kompatibel. Merk dir das.
quelle
Im Zweifelsfall rufen Sie einfach die Javascript-Webkonsole eines modernen Browsers auf, indem Sie F12 (Strg + K in Firefox) drücken, und schreiben Sie Folgendes:
Wird ausgegeben:
Ta-da !!
quelle
Ich glaube, dass das beste Format für universelle Interoperabilität nicht die ISO-8601-Zeichenfolge ist, sondern das von EJSON verwendete Format:
{ "myDateField": { "$date" : <ms-since-epoch> } }
Wie hier beschrieben: https://docs.meteor.com/api/ejson.html
Leistungen
Fazit
Ich verstehe , dass ein lesbares Format (ISO-8601 string) ist nützlich und bequem für 80% der Anwendungsfälle, und in der Tat niemand jemals gesagt wird , nicht ihre Daten als ISO-8601 - Strings zu speichern , wenn das ist , was ihre Anwendungen verstehen, aber für eine allgemein anerkannte Transportformat , die auf bestimmte Werte garantieren sollte sicher Daten sein, wie können wir für Mehrdeutigkeit und Notwendigkeit für so viel Validierung ermöglichen?
quelle
JSON selbst hat kein Datumsformat, es ist egal, wie jemand Daten speichert. Da diese Frage jedoch mit Javascript gekennzeichnet ist, möchten Sie vermutlich wissen, wie Javascript-Daten in JSON gespeichert werden. Sie können einfach ein Datum an die
JSON.stringify
Methode übergeben, und es wirdDate.prototype.toJSON
standardmäßig verwendet, das wiederum verwendetDate.prototype.toISOString
( MDN auf Date.toJSON ):Ich fand es auch nützlich, den
reviver
ParameterJSON.parse
( MDN auf JSON.parse ) zu verwenden, um ISO-Zeichenfolgen automatisch wieder in Javascript-Daten zu konvertieren, wenn ich JSON-Zeichenfolgen lese.quelle
Der bevorzugte Weg ist die Verwendung von
2018-04-23T18:25:43.511Z
...Das Bild unten zeigt, warum dies der bevorzugte Weg ist:
Wie Sie sehen, hat Date eine native Methode
toJSON
, diereturn
in diesem Format problemlos wieder konvertiertDate
werden kann ...quelle
In Sharepoint 2013 gibt es beim Abrufen von Daten in JSON kein Format zum Konvertieren des Datums in das Nur-Datum-Format, da in diesem Datum das ISO-Format vorliegen sollte
Dies kann für Sie hilfreich sein
quelle
2014-01-01T23: 28: 56.782Z
Das Datum wird in einem standardmäßigen und sortierbaren Format dargestellt, das eine UTC-Zeit darstellt (angezeigt durch das Z). ISO 8601 unterstützt auch Zeitzonen, indem das Z durch den Wert + oder - für den Zeitzonenversatz ersetzt wird:
2014-02-01T09: 28: 56.321-10: 00
Es gibt andere Variationen der Zeitzonencodierung in der ISO 8601-Spezifikation, aber das Format –10: 00 ist das einzige TZ-Format, das aktuelle JSON-Parser unterstützen. Im Allgemeinen ist es am besten, das UTC-basierte Format (Z) zu verwenden, es sei denn, Sie müssen die Zeitzone ermitteln, in der das Datum erstellt wurde (nur bei der serverseitigen Generierung möglich).
NB: var date = new Date (); console.log (Datum); // Mi Jan 01 2014 13:28:56 GMT-1000 (hawaiianische Standardzeit)
um Ihnen zu sagen, dass dies der bevorzugte Weg ist, obwohl JavaScript kein Standardformat dafür hat
quelle
Wenn Sie Kotlin verwenden, wird dies Ihr Problem lösen. (MS Json-Format)
quelle
Es ist Arbeit für mich mit Parse Server
quelle
Es gibt nur eine richtige Antwort darauf und die meisten Systeme verstehen es falsch. Anzahl der Millisekunden seit der Epoche, auch bekannt als 64-Bit-Ganzzahl. Die Zeitzone ist ein Problem der Benutzeroberfläche und hat nichts mit der App- oder DB-Ebene zu tun. Warum kümmert es Ihre Datenbank, welche Zeitzone etwas ist, wenn Sie wissen, dass es als 64-Bit-Ganzzahl gespeichert wird, führen Sie dann die Transformationsberechnungen durch.
Entfernen Sie die überflüssigen Bits und behandeln Sie Datumsangaben als Zahlen bis zur Benutzeroberfläche. Sie können einfache arithmetische Operatoren verwenden, um Abfragen und Logik auszuführen.
quelle
Der folgende Code hat bei mir funktioniert. Dieser Code druckt das Datum im Format TT-MM-JJJJ .
Andernfalls können Sie auch Folgendes verwenden:
quelle
Ich denke, das hängt wirklich vom Anwendungsfall ab. In vielen Fällen kann es vorteilhafter sein, ein geeignetes Objektmodell zu verwenden (anstatt das Datum in eine Zeichenfolge zu rendern), wie folgt:
Zugegeben, dies ist ausführlicher als RFC 3339, aber:
Date.toJSON()
nicht)Ich denke nicht, dass die korrekte Sortierung (wie von funroll für RFC 3339 angegeben) eine Funktion ist, die wirklich benötigt wird, wenn ein Datum in JSON serialisiert wird. Dies gilt auch nur für Datums- und Uhrzeitangaben mit demselben Zeitzonenversatz.
quelle
post contains wrong information, is poorly researched, or fails to communicate information
. Bitte erläutern Sie, aus welchem dieser Gründe Sie diese Antwort abgelehnt haben.