Start · Sprachen · JavaScript · Referenz · Temporal.PlainDate.prototype.toJSON()

Temporal.PlainDate.prototype.toJSON()

Methode

Gibt das Datum als String im RFC 9557-Format zurück, z. B. <code>"2024-03-15"</code>. Das Ergebnis ist identisch mit <code>toString()</code> ohne Optionen.

seit JavaScript Temporal (TC39): Firefox 139+, Chrome 144+; Safari Kategorie: method-property

Signatur

Temporal.PlainDate.prototype.toJSON()

Beschreibung

toJSON() macht Temporal.PlainDate-Objekte serialisierbar. Die Methode liefert denselben String wie toString() mit Standardoptionen, also ein Datum im Format JJJJ-MM-TT nach ISO 8601 bzw. RFC 9557. Verwendet das Datum einen anderen Kalender als ISO 8601, wird eine Kalender-Annotation wie [u-ca=hebrew] angehängt.

Normalerweise ruft man die Methode nicht selbst auf. JSON.stringify() ruft sie automatisch für jedes Objekt auf, das eine toJSON-Methode hat. Deshalb landen PlainDate-Werte in Objekten, Arrays oder API-Antworten ohne zusätzlichen Code als lesbare Datums-Strings im JSON.

Die Gegenrichtung funktioniert nicht automatisch. JSON.parse() gibt nur einen String zurück. Um wieder ein Temporal.PlainDate zu erhalten, verwendet man eine Reviver-Funktion zusammen mit Temporal.PlainDate.from().

Rückgabewert

Typ
string
Beschreibung
Das Datum im RFC 9557-Format, z. B. "2024-03-15". Bei einem anderen Kalender als ISO 8601 wird eine Annotation angehängt, z. B. "2024-03-15[u-ca=hebrew]".

Beispiele

Direkter Aufruf

const datum = Temporal.PlainDate.from("2024-03-15");
console.log(datum.toJSON());
console.log(datum.toJSON() === datum.toString());
2024-03-15 true

Automatische Serialisierung mit JSON.stringify()

const aufgabe = {
  titel: "Steuererklärung",
  faellig: Temporal.PlainDate.from({ year: 2024, month: 7, day: 31 }),
};

// JSON.stringify ruft toJSON() automatisch auf
console.log(JSON.stringify(aufgabe));
{"titel":"Steuererklärung","faellig":"2024-07-31"}

Daten beim Parsen wiederherstellen (Reviver)

const json = '{"titel":"Urlaub","start":"2024-08-01","ende":"2024-08-14"}';

const datumsFelder = new Set(["start", "ende"]);
const urlaub = JSON.parse(json, (key, value) =>
  datumsFelder.has(key) ? Temporal.PlainDate.from(value) : value
);

const tage = urlaub.start.until(urlaub.ende).days;
console.log(urlaub.start instanceof Temporal.PlainDate, tage);
true 13

Kalender, der nicht ISO 8601 ist

const d = Temporal.PlainDate.from("2024-03-15[u-ca=hebrew]");
console.log(JSON.stringify({ datum: d }));
{"datum":"2024-03-15[u-ca=hebrew]"}

// Wichtig · Fallstricke

  • Keine Optionen: toJSON() nimmt keine Argumente entgegen. Für ein anderes Format, z. B. um die Kalender-Annotation zu erzwingen oder wegzulassen, verwendet man toString({ calendarName: \"always\" | \"never\" | \"critical\" }). Für die Anzeige für Menschen ist toLocaleString() gedacht.
  • Kein Weg zurück ohne Hilfe: JSON.parse() erzeugt kein PlainDate. Man braucht einen Reviver mit Temporal.PlainDate.from().
  • Jahre außerhalb von 0000–9999 werden mit sechs Stellen und Vorzeichen ausgegeben, z. B. \"+010000-01-01\" oder \"-000001-01-01\". Andere Systeme verstehen dieses Format eventuell nicht.
  • Die Kalender-Annotation ([u-ca=…]) verstehen viele Parser außerhalb von Temporal nicht, zum Beispiel Date.parse() oder manche Backends. Speichert man Daten für andere Systeme, wandelt man sie am besten vorher mit withCalendar(\"iso8601\") um.
  • Kompatibilität: Temporal ist erst in neueren Browsern verfügbar (Firefox 139+, Chrome 144+). In Safari und älteren Umgebungen braucht man einen Polyfill wie @js-temporal/polyfill oder temporal-polyfill.