Signatur
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
"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());
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));
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);
Kalender, der nicht ISO 8601 ist
const d = Temporal.PlainDate.from("2024-03-15[u-ca=hebrew]");
console.log(JSON.stringify({ datum: d }));
// 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 mantoString({ calendarName: \"always\" | \"never\" | \"critical\" }). Für die Anzeige für Menschen isttoLocaleString()gedacht. - Kein Weg zurück ohne Hilfe:
JSON.parse()erzeugt keinPlainDate. Man braucht einen Reviver mitTemporal.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 BeispielDate.parse()oder manche Backends. Speichert man Daten für andere Systeme, wandelt man sie am besten vorher mitwithCalendar(\"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/polyfillodertemporal-polyfill.