Signatur
Beschreibung
Die Methode until() berechnet den Abstand zwischen zwei exakten Zeitpunkten auf der Zeitachse. Das Ergebnis ist ein neues Temporal.Duration-Objekt. Es ist positiv, wenn other nach this liegt, und negativ, wenn other davor liegt. a.until(b) liefert also dasselbe Ergebnis wie b.since(a).
Ein Temporal.Instant hat weder Kalender noch Zeitzone. Deshalb kann until() nur in festen Zeiteinheiten rechnen: Stunden, Minuten, Sekunden, Millisekunden, Mikrosekunden und Nanosekunden. Ohne Optionen wird das Ergebnis in Sekunden und Sekundenbruchteilen angegeben (z. B. PT97445.5S). Mit largestUnit: "hour" erhältst du eine besser lesbare Aufteilung wie PT27H4M5.5S.
Typische Einsätze: Laufzeiten messen (zusammen mit Temporal.Now.instant()), Countdowns bis zu einer Frist, Abstände zwischen Log-Zeitstempeln oder Ablaufzeiten von Tokens. Brauchst du Tage, Monate oder Jahre, wandelst du die Zeitpunkte vorher mit toZonedDateTimeISO() in ein Temporal.ZonedDateTime um. Nur dort lassen sich Kalendereinheiten und Sommerzeitwechsel korrekt berücksichtigen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $other Pflicht | Temporal.Instant | string | Der Zielzeitpunkt. Strings werden wie bei Temporal.Instant.from() eingelesen und müssen eine Zeitzonenangabe enthalten, z. B. Z oder +01:00. |
|
| $options | object | {} | Optionen für Einheiten und Rundung:
|
Rückgabewert
Temporal.Duration-Objekt mit dem Abstand von this bis other. Es ist negativ, wenn other früher liegt. Die Jahres-, Monats-, Wochen- und Tagesfelder sind immer 0.Beispiele
Grundlegende Differenz und lesbare Einheiten
const start = Temporal.Instant.from("2024-01-01T00:00:00Z");
const end = Temporal.Instant.from("2024-01-02T03:04:05.5Z");
// Standard: Sekunden als größte Einheit
console.log(start.until(end).toString());
// Besser lesbar mit Stunden als größter Einheit
console.log(start.until(end, { largestUnit: "hour" }).toString());
// Umgekehrte Richtung ergibt eine negative Dauer
console.log(end.until(start).toString());
Countdown bis zu einer Frist, auf Minuten gerundet
const now = Temporal.Instant.from("2025-03-10T08:17:42Z"); // in der Praxis: Temporal.Now.instant()
const deadline = Temporal.Instant.from("2025-03-10T17:00:00+01:00");
const remaining = now.until(deadline, {
largestUnit: "hour",
smallestUnit: "minute",
roundingMode: "halfExpand",
});
console.log(`Noch ${remaining.hours} h ${remaining.minutes} min bis zur Abgabe`);
console.log(remaining.toString());
Laufzeit einer asynchronen Operation messen
const measure = async (fn) => {
const t0 = Temporal.Now.instant();
await fn();
const elapsed = t0.until(Temporal.Now.instant());
return elapsed.total("millisecond");
};
const ms = await measure(() => new Promise((r) => setTimeout(r, 250)));
console.log(`Dauer: ${Math.round(ms)} ms`);
Differenz in Tagen über ZonedDateTime
const a = Temporal.Instant.from("2024-01-01T00:00:00Z");
const b = Temporal.Instant.from("2024-01-02T03:04:05.5Z");
// a.until(b, { largestUnit: "day" }) würde einen RangeError werfen
const diff = a.toZonedDateTimeISO("UTC")
.until(b.toZonedDateTimeISO("UTC"), { largestUnit: "day" });
console.log(diff.toString());