Signatur
Beschreibung
toJSON() sorgt dafür, dass sich ein Temporal.PlainYearMonth sinnvoll mit JSON speichern lässt. JSON.stringify() ruft die Methode automatisch auf, wenn ein solches Objekt in den Daten steckt. Heraus kommt die gleiche Zeichenkette wie bei toString() ohne Argumente. Beim ISO-8601-Kalender ist das die Form JJJJ-MM, zum Beispiel "2024-03".
Normalerweise ruft man die Methode nicht selbst auf. Sie wirkt im Hintergrund, wenn man Monatswerte an eine API schickt, im localStorage ablegt oder in Log-Dateien schreibt. Typische Monatswerte sind Abrechnungszeiträume, Ablaufdaten von Kreditkarten oder Berichtsmonate. Wenn du die Ausgabe steuern willst, etwa die Kalender-Angabe erzwingen, nimm stattdessen toString(options).
Bei einem anderen Kalender als iso8601 reicht JJJJ-MM nicht aus. Dann enthält die Ausgabe zusätzlich den Referenz-Tag im ISO-Kalender und eine Kalender-Angabe, zum Beispiel "2024-03-11[u-ca=hebrew]". Nur so lässt sich der Wert später eindeutig wiederherstellen.
Das Zurückverwandeln passiert nicht von selbst: JSON.parse() liefert nur eine Zeichenkette zurück. Um wieder ein Temporal.PlainYearMonth zu bekommen, wandelst du diese Zeichenkette mit Temporal.PlainYearMonth.from() um, zum Beispiel in einer Reviver-Funktion.
Rückgabewert
toString() übereinstimmt, z. B. "2024-03". Bei einem Kalender außer ISO kommen der Referenz-Tag und [u-ca=…] dazu.Beispiele
Direkter Aufruf
const monat = Temporal.PlainYearMonth.from({ year: 2024, month: 3 });
console.log(monat.toJSON());
console.log(monat.toJSON() === monat.toString());
Automatisch über JSON.stringify()
const rechnung = {
nummer: 'R-2024-0815',
zeitraum: Temporal.PlainYearMonth.from('2024-11'),
karteGueltigBis: new Temporal.PlainYearMonth(2027, 8)
};
// JSON.stringify ruft toJSON() für jedes Temporal-Objekt auf
console.log(JSON.stringify(rechnung));
Mit Reviver wieder in ein PlainYearMonth umwandeln
const json = '{"nummer":"R-2024-0815","zeitraum":"2024-11"}';
const daten = JSON.parse(json, (key, value) =>
key === 'zeitraum' ? Temporal.PlainYearMonth.from(value) : value
);
console.log(daten.zeitraum instanceof Temporal.PlainYearMonth);
console.log(daten.zeitraum.daysInMonth);
Kalender außer ISO: Ausgabe mit Kalender-Angabe
const hebr = Temporal.PlainYearMonth.from({
calendar: 'hebrew',
year: 5784,
month: 7
});
// Enthält den ISO-Referenz-Tag und die Kalender-Angabe
console.log(hebr.toJSON());
// Wichtig · Fallstricke
- Keine automatische Rückwandlung:
JSON.parse()gibt nur eine Zeichenkette zurück. Zum Umwandeln brauchst duTemporal.PlainYearMonth.from(), zum Beispiel in einem Reviver. - Keine Optionen:
toJSON()nimmt keine Argumente an. Um die Ausgabe zu steuern (z. B.calendarName: 'always'), nimmtoString(options). - Nicht zur Anzeige gedacht: Das Format ist maschinenlesbar. Für Texte an Nutzer nimm
toLocaleString()oderIntl.DateTimeFormat. - Nicht mit Zeichenketten vergleichen: Das Vergleichen der JSON-Zeichenketten klappt nur beim ISO-Kalender und bei Jahren von 0000 bis 9999 verlässlich. Jahre außerhalb davon erscheinen im erweiterten Format, z. B.
"+012345-01"oder"-000001-01". Nimm besserTemporal.PlainYearMonth.compare()oderequals(). Vergleiche mit</>schlagen fehl, weilvalueOf()einenTypeErrorwirft. - Kompatibilität: Temporal ist noch recht neu (Firefox 139+, Chrome 144+). In Safari und älteren Umgebungen brauchst du einen Polyfill, z. B.
@js-temporal/polyfillodertemporal-polyfill. Vorher solltest du mittypeof Temporal !== 'undefined'prüfen, ob Temporal vorhanden ist.