Signatur
Beschreibung
Die Methode toJSON() von Temporal.Instant-Instanzen gibt eine Zeichenkette zurück, die den Zeitpunkt im RFC 9557-Format darstellt, z. B. "2024-03-15T12:30:00Z". Das Ergebnis ist dasselbe wie bei einem Aufruf von toString() ohne Argumente: Die Zeit wird in UTC ausgegeben, mit dem Suffix Z und nur so vielen Nachkommastellen wie nötig (bis zu Nanosekunden).
Normalerweise ruft man toJSON() nicht direkt auf. JSON.stringify() ruft die Methode automatisch auf, wenn es ein Temporal.Instant serialisiert. So landen Zeitpunkte in Objekten ohne eigenen Code als lesbare, sortierbare ISO-Zeichenketten im JSON, etwa für REST-APIs, Logs oder localStorage.
Beim Rückweg funktioniert das nicht automatisch: JSON.parse() erzeugt aus der Zeichenkette kein Temporal.Instant. Man muss sie selbst mit Temporal.Instant.from() umwandeln, am besten in einer Reviver-Funktion.
Rückgabewert
"2024-03-15T12:30:00.123Z". Sie ist identisch mit instant.toString().Beispiele
Direkter Aufruf im Vergleich zu toString()
const instant = Temporal.Instant.from("2024-03-15T13:30:00.5+01:00");
console.log(instant.toJSON());
console.log(instant.toJSON() === instant.toString());
Automatische Serialisierung mit JSON.stringify()
const event = {
id: 42,
typ: "login",
zeitpunkt: Temporal.Instant.fromEpochMilliseconds(1710505800000),
};
const json = JSON.stringify(event);
console.log(json);
Rückweg: Instant per Reviver wiederherstellen
const json = '{"id":42,"zeitpunkt":"2024-03-15T12:30:00Z"}';
const daten = JSON.parse(json, (key, value) =>
key === "zeitpunkt" ? Temporal.Instant.from(value) : value
);
console.log(daten.zeitpunkt instanceof Temporal.Instant);
console.log(daten.zeitpunkt.epochMilliseconds);
Eigenes Format statt toJSON() mit einem Replacer
const log = { ts: Temporal.Instant.from("2024-03-15T12:30:00.123456789Z") };
// Auf Sekunden runden und als Zeitzonen-Offset ausgeben
const json = JSON.stringify(log, function (key, value) {
const original = this[key];
return original instanceof Temporal.Instant
? original.toString({ smallestUnit: "second", timeZone: "Europe/Berlin" })
: value;
});
console.log(json);
// Wichtig · Fallstricke
- Keine Optionen:
toJSON()nimmt keine Argumente. Wenn du eine andere Genauigkeit, eine Rundung oder einen Zeitzonen-Offset brauchst, nimmtoString(options), zum Beispiel in einem Replacer fürJSON.stringify(). Beachte: Der Replacer bekommt den Wert erst nach dem Aufruf vontoJSON(). Das Original erreichst du nur überthis[key]. - Kein automatischer Rückweg:
JSON.parse()liefert eine normale Zeichenkette. Für ein Instant brauchst duTemporal.Instant.from(). - Unterschied zu Date:
Date.prototype.toJSON()gibt immer genau drei Nachkommastellen aus (Millisekunden).Temporal.Instantgibt nur so viele aus wie nötig, bis zu neun (Nanosekunden). Wenn ein Parser feste Längen erwartet, kann das Probleme machen. - Kompatibilität: Temporal ist noch recht neu. Firefox ab Version 139 und Chrome ab Version 144 unterstützen es. In Safari und älteren Umgebungen brauchst du einen Polyfill, z. B.
@js-temporal/polyfillodertemporal-polyfill.