Die Methode Date.prototype.toJSON() wird automatisch von JSON.stringify() aufgerufen, wenn ein Date-Objekt serialisiert werden soll. Sie liefert das Datum als ISO-8601-konformen String zurück und ist im Wesentlichen ein dünner Wrapper um toISOString(). Ihre Existenz erklärt, warum Daten in JSON-Antworten standardmäßig im UTC-ISO-Format auftauchen und nicht etwa als Unix-Zeitstempel oder als nicht maschinenlesbares toString()-Format.
Funktionsweise
toJSON() ist Teil eines Patterns, das JSON.stringify() allgemein verwendet: Wenn ein zu serialisierendes Objekt eine Methode namens toJSON besitzt, wird sie aufgerufen und ihr Rückgabewert anstelle des Objekts serialisiert.
Bei einem Date-Objekt liefert toJSON():
- Gültiges Datum: Den UTC-ISO-String wie
toISOString(). - Ungültiges Datum:
null(im Gegensatz zutoISOString(), die einenRangeErrorwerfen würde).
Diese Sonderbehandlung für ungültige Daten ist absichtlich: JSON kennt keinen „Invalid Date”-Wert, und eine Exception mitten im Serialisierungsvorgang wäre unangenehm. Mit null bleibt die JSON-Ausgabe stabil.
Syntax
date.toJSON()
date.toJSON(key)key (Optional, wird nicht verwendet) Ein Parameter, der von JSON.stringify() automatisch übergeben wird – der Schlüssel der aktuellen Property im Objekt. Wird von der Date-Implementierung ignoriert.
Rückgabewert
Ein String im ISO-8601-Format. Bei einem ungültigen Date-Objekt wird null zurückgegeben.
Beispiele
Direktaufruf
const date = new Date("2026-05-01T14:30:00.000Z");
console.log(date.toJSON());2026-05-01T14:30:00.000ZAutomatischer Aufruf durch JSON.stringify()
const event = {
id: 42,
zeitpunkt: new Date("2026-05-01T14:30:00Z")
};
console.log(JSON.stringify(event));{"id":42,"zeitpunkt":"2026-05-01T14:30:00.000Z"}Ungültiges Datum liefert null
const invalid = new Date("kein Datum");
console.log(invalid.toJSON());
console.log(JSON.stringify({ d: invalid }));null
{"d":null}Round-Trip durch JSON
const original = { ts: new Date("2026-05-01T14:30:00.000Z") };
const json = JSON.stringify(original);
const parsed = JSON.parse(json);
// parsed.ts ist ein String, kein Date - manuelle Re-Hydratation nötig
const reHydrated = { ...parsed, ts: new Date(parsed.ts) };
console.log(reHydrated.ts.getTime() === original.ts.getTime());trueHinweise & verwandte Methoden
toJSON()wird niemals manuell aufgerufen – nutze stattdessenJSON.stringify()oder, wenn nur der ISO-String gebraucht wird, direkttoISOString().- Beim Deserialisieren mit
JSON.parse()wird ein Date-String nicht automatisch zurück in ein Date-Objekt verwandelt – das Ergebnis ist ein String. Für die Re-Hydratation eignet sich derreviver-Parameter vonJSON.parse(). - Der Unterschied zu
toISOString():toJSON()wirft bei ungültigem Datum kein Error, sondern liefertnull. Das ist sicherer beim Serialisieren ganzer Objekt-Bäume. - Eigene Klassen können diesem Muster folgen: Eine Methode
toJSON()auf einer Instanz wird automatisch vonJSON.stringify()aufgerufen.