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

Temporal.Duration.prototype.toJSON()

Methode

Gibt die Dauer als ISO-8601-Zeichenkette zurück (z. B. <code>"PT1H30M"</code>), genau wie <code>toString()</code> ohne Optionen. Wird von <code>JSON.stringify()</code> automatisch aufgerufen.

seit JavaScript ES2026 (Temporal); Firefox 139+, Chrome 144+, Safa Kategorie: method-property

Signatur

Temporal.Duration.prototype.toJSON()

Beschreibung

Die Methode toJSON() von Temporal.Duration-Instanzen gibt eine Zeichenkette im ISO-8601-Dauerformat zurück, etwa "P1Y2M10DT2H30M". Das Ergebnis ist identisch mit dem Aufruf von toString() ohne Argumente.

Meist ruft man toJSON() nicht selbst auf. JSON.stringify() ruft sie automatisch auf, sobald ein Temporal.Duration-Objekt serialisiert wird. So lassen sich Dauern ohne zusätzlichen Code in JSON-Nutzlasten, im localStorage oder in API-Anfragen speichern.

Umgekehrt geht das nicht automatisch: JSON.parse() liefert nur eine Zeichenkette zurück. Um wieder ein Temporal.Duration-Objekt zu erhalten, verwendet man Temporal.Duration.from(), am besten in einer reviver-Funktion von JSON.parse().

Rückgabewert

Typ
string
Beschreibung
Die Dauer als ISO-8601-Zeichenkette, z. B. "PT1H30M" oder "-P2D". Eine Nulldauer ergibt "PT0S".

Beispiele

Direkter Aufruf und Vergleich mit toString()

const dauer = Temporal.Duration.from({ hours: 1, minutes: 30 });

console.log(dauer.toJSON());
console.log(dauer.toJSON() === dauer.toString());
console.log(Temporal.Duration.from({}).toJSON());
PT1H30M true PT0S

Automatische Serialisierung mit JSON.stringify()

const aufgabe = {
  titel: 'Code-Review',
  geschaetzt: Temporal.Duration.from({ hours: 2, minutes: 15 }),
  puffer: Temporal.Duration.from({ days: 1 })
};

const json = JSON.stringify(aufgabe);
console.log(json);
{"titel":"Code-Review","geschaetzt":"PT2H15M","puffer":"P1D"}

Rückweg: Dauer per reviver wiederherstellen

const json = '{"titel":"Meeting","laenge":"PT45M"}';

// Felder, die Dauern enthalten, gezielt zurückwandeln
const dauerFelder = new Set(['laenge']);
const termin = JSON.parse(json, (key, value) =>
  dauerFelder.has(key) ? Temporal.Duration.from(value) : value
);

console.log(termin.laenge instanceof Temporal.Duration);
console.log(termin.laenge.total('seconds'));
true 2700

Dauer im localStorage speichern

const timeout = Temporal.Duration.from({ minutes: 5, seconds: 30 });
localStorage.setItem('settings', JSON.stringify({ timeout }));

const geladen = JSON.parse(localStorage.getItem('settings'));
const wieder = Temporal.Duration.from(geladen.timeout);
console.log(wieder.toString());
PT5M30S

// Wichtig · Fallstricke

  • Keine Optionen: Anders als toString() nimmt toJSON() keine Parameter wie fractionalSecondDigits, smallestUnit oder roundingMode an. Wer eine bestimmte Genauigkeit braucht, ruft vor dem Serialisieren selbst toString(options) auf.
  • Keine automatische Deserialisierung: JSON.parse() liefert eine Zeichenkette. Die Rückwandlung erfolgt mit Temporal.Duration.from().
  • Kein Balancing: Die Ausgabe spiegelt die gespeicherten Felder wider. { minutes: 90 } ergibt "PT90M", nicht "PT1H30M". Zum Normalisieren vorher round({ largestUnit: 'hour' }) verwenden.
  • Für eine für Menschen lesbare Ausgabe eignet sich toLocaleString() bzw. Intl.DurationFormat.
  • Kompatibilität: Temporal ist noch nicht in allen Engines verfügbar (Firefox 139+, Chrome 144+, Safari nicht). Für ältere Umgebungen gibt es das Polyfill @js-temporal/polyfill bzw. temporal-polyfill.