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

Temporal.PlainMonthDay.prototype.toJSON()

Methode

Gibt den Monat-Tag als RFC 9557-String zurück, z. B. <code>"12-24"</code>. Das Ergebnis entspricht <code>toString()</code> ohne Optionen.

seit JavaScript Temporal (ES-Proposal Stage 3/4) – Firefox 139+, C Kategorie: method-property

Signatur

Temporal.PlainMonthDay.prototype.toJSON()

Beschreibung

Die Methode toJSON() liefert eine Textdarstellung einer Temporal.PlainMonthDay-Instanz. Das Ergebnis ist dasselbe wie bei toString() mit den Standardoptionen. Beim ISO-8601-Kalender hat der String das Format MM-DD, z. B. "02-29". Bei anderen Kalendern enthält der String zusätzlich das ISO-Referenzjahr und eine Kalender-Annotation, z. B. [u-ca=chinese].

Normalerweise ruft man toJSON() nicht selbst auf. JSON.stringify() ruft die Methode automatisch auf, sobald es auf ein PlainMonthDay-Objekt trifft. So lassen sich wiederkehrende Termine ohne Jahr serialisieren, etwa Geburtstage, Feiertage oder Jahrestage. Die Daten können dann an APIs geschickt oder im localStorage gespeichert werden.

Der umgekehrte Weg funktioniert nicht automatisch. JSON.parse() gibt nur einen String zurück und erzeugt kein PlainMonthDay-Objekt. Um das Objekt wiederherzustellen, verwendet man eine Reviver-Funktion zusammen mit Temporal.PlainMonthDay.from().

Rückgabewert

Typ
string
Beschreibung
Ein String im RFC 9557-/ISO 8601-Format, z. B. "12-24". Er ist identisch mit monthDay.toString().

Beispiele

Einfacher Aufruf

const heiligabend = Temporal.PlainMonthDay.from({ month: 12, day: 24 });
console.log(heiligabend.toJSON());
console.log(heiligabend.toJSON() === heiligabend.toString());

// Der Schalttag funktioniert ebenfalls, weil kein Jahr gebunden ist
console.log(Temporal.PlainMonthDay.from("02-29").toJSON());
12-24 true 02-29

Automatische Serialisierung mit JSON.stringify()

const geburtstage = [
  { name: "Anna", tag: Temporal.PlainMonthDay.from({ month: 3, day: 14 }) },
  { name: "Ben", tag: Temporal.PlainMonthDay.from({ month: 11, day: 2 }) },
];

// JSON.stringify ruft toJSON() für jedes PlainMonthDay-Objekt auf
const json = JSON.stringify(geburtstage);
console.log(json);
[{"name":"Anna","tag":"03-14"},{"name":"Ben","tag":"11-02"}]

Wiederherstellen mit einer Reviver-Funktion

const json = '{"name":"Tag der Einheit","datum":"10-03"}';

const feiertag = JSON.parse(json, (key, value) =>
  key === "datum" ? Temporal.PlainMonthDay.from(value) : value
);

console.log(feiertag.datum instanceof Temporal.PlainMonthDay);
console.log(feiertag.datum.day);

// Das Datum im Jahr 2025 bestimmen
console.log(feiertag.datum.toPlainDate({ year: 2025 }).dayOfWeek);
true 3 5

// Wichtig · Fallstricke

  • Keine automatische Rückumwandlung: JSON.parse() liefert nur einen String. Um wieder ein Objekt zu erhalten, braucht man eine Reviver-Funktion mit Temporal.PlainMonthDay.from().
  • Keine Parameter: Übergebene Argumente werden ignoriert. Wer die Ausgabe steuern will, verwendet toString({ calendarName: \"always\" }). Für eine lesbare Ausgabe in der jeweiligen Sprache eignet sich toLocaleString().
  • Andere Kalender als ISO: Das Ergebnis enthält dann ein Referenzjahr und eine Kalender-Annotation, z. B. …[u-ca=chinese]. Andere Systeme, die solche Strings lesen, müssen RFC 9557 unterstützen.
  • Kein Vergleich mit </>: valueOf() wirft einen TypeError. PlainMonthDay hat außerdem keine statische compare()-Methode. Für Gleichheit verwendet man equals().
  • Kompatibilität: Temporal wird noch nicht überall unterstützt: Firefox ab 139, Chrome/Edge ab 144, Safari bisher nicht. Für ältere Umgebungen gibt es Polyfills wie @js-temporal/polyfill oder temporal-polyfill.