Signatur
Beschreibung
Die Methode add() verschiebt einen exakten Zeitpunkt auf der Zeitachse um eine feste Zeitspanne nach vorn. Weil Temporal.Instant weder Zeitzone noch Kalender kennt, sind nur exakte Zeiteinheiten erlaubt: hours, minutes, seconds, milliseconds, microseconds und nanoseconds. Die Rechnung ist auf die Nanosekunde genau.
Die Dauer kannst du als Temporal.Duration-Instanz, als Objekt wie { hours: 2, minutes: 30 } oder als ISO-8601-Dauerstring wie "PT2H30M" übergeben. Sie wird intern mit Temporal.Duration.from() umgewandelt. Bei einer negativen Dauer bewegt sich der Zeitpunkt zurück. instant.add(d) liefert also dasselbe wie instant.subtract(d.negated()).
Wie alle Temporal-Objekte ist Temporal.Instant unveränderlich: Das ursprüngliche Objekt bleibt gleich, du bekommst immer eine neue Instanz zurück. Typische Einsätze sind Ablaufzeiten für Tokens und Caches, Timeouts oder Zeitstempel in Logs, also überall, wo es um exakte Zeitabstände geht und die Uhrzeit vor Ort keine Rolle spielt.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $duration Pflicht | Temporal.Duration | object | string | Die Dauer, die addiert wird. Möglich sind eine Temporal.Duration, ein Objekt mit Dauer-Feldern (z. B. { minutes: 15 }) oder ein ISO-8601-String (z. B. "PT15M"). years, months, weeks und days müssen 0 sein. |
Rückgabewert
Temporal.Instant-Instanz für den Zeitpunkt this + duration.Beispiele
Stunden und Minuten addieren
const start = Temporal.Instant.from("2024-01-01T00:00:00Z");
const later = start.add({ hours: 1, minutes: 30 });
console.log(later.toString());
// Das Original bleibt unverändert
console.log(start.toString());
ISO-Dauerstring und Nanosekunden-Genauigkeit
const t = Temporal.Instant.from("2024-06-15T12:00:00Z");
console.log(t.add("PT48H").toString()); // 48 Stunden sind erlaubt
console.log(t.add({ nanoseconds: 1 }).toString());
console.log(t.add({ minutes: -10 }).toString()); // negative Dauer: zurück
Ablaufzeit eines Tokens berechnen
const TOKEN_TTL = Temporal.Duration.from({ minutes: 15 });
const issueToken = () => {
const issuedAt = Temporal.Now.instant();
return { issuedAt, expiresAt: issuedAt.add(TOKEN_TTL) };
};
const isExpired = (token) =>
Temporal.Instant.compare(Temporal.Now.instant(), token.expiresAt) >= 0;
const token = issueToken();
console.log(isExpired(token));
Tage sind nicht erlaubt: RangeError und Ausweg
const t = Temporal.Instant.from("2024-03-30T12:00:00Z");
try {
t.add({ days: 1 });
} catch (err) {
console.log(err instanceof RangeError);
}
// Ausweg: feste 24 Stunden ...
console.log(t.add({ hours: 24 }).toString());
// ... oder Kalendertage in einer bestimmten Zeitzone
const nextDay = t.toZonedDateTimeISO("Europe/Berlin").add({ days: 1 }).toInstant();
console.log(nextDay.toString());
// Wichtig · Fallstricke
- Keine Kalendereinheiten: Enthält die Dauer
years,months,weeksoderdaysmit einem Wert ungleich 0, wird einRangeErrorgeworfen. Ein „Tag“ ist ohne Zeitzone nicht eindeutig, denn bei der Zeitumstellung dauert er 23 oder 25 Stunden. Für Kalenderrechnung nimmTemporal.ZonedDateTime. - Wertebereich: Liegt das Ergebnis außerhalb des erlaubten Bereichs von ±108 Tagen um die Unix-Epoche, gibt es ebenfalls einen
RangeError. - Ungültige Eingaben: Ein Objekt ohne ein einziges bekanntes Dauer-Feld führt zu einem
TypeError. Ein falsch formatierter String führt zu einemRangeError. - Unveränderlichkeit:
add()ändert das Objekt nicht. Du musst den Rückgabewert verwenden,instant.add(...)allein bewirkt nichts. - Browser-Unterstützung: Temporal ist neu und wird bisher nur von Firefox (ab 139) und Chromium-Browsern (ab 144) unterstützt, nicht aber von Safari. In älteren Umgebungen hilft ein Polyfill wie
@js-temporal/polyfillodertemporal-polyfill.