Start · Sprachen · JavaScript · Referenz · Temporal.Instant.prototype.until()

Temporal.Instant.prototype.until()

Methode

Gibt ein <code>Temporal.Duration</code>-Objekt mit der Dauer von diesem Zeitpunkt bis zu einem anderen <code>Temporal.Instant</code> zurück, auf Wunsch gerundet und in wählbaren Einheiten.

seit JavaScript ES2026 (Temporal) – Firefox 139+, Chrome/Edge 144+ Kategorie: method-property

Signatur

Temporal.Instant.prototype.until(other, options)

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:
  • largestUnit: größte Einheit im Ergebnis. Erlaubt sind "auto" (= "second", oder smallestUnit, falls diese größer ist), "hour", "minute", "second", "millisecond", "microsecond" und "nanosecond". Standard: "auto".
  • smallestUnit: kleinste Einheit im Ergebnis. Standard: "nanosecond", also ohne Rundung.
  • roundingIncrement: Rundungsschritt in smallestUnit, z. B. 15 für Viertelstunden. Standard: 1.
  • roundingMode: Art der Rundung, z. B. "trunc", "floor", "ceil" oder "halfExpand". Standard: "trunc".

Rückgabewert

Typ
Temporal.Duration
Beschreibung
Ein neues 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());
PT97445.5S PT27H4M5.5S -PT97445.5S

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());
Noch 7 h 42 min bis zur Abgabe PT7H42M

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`);
Dauer: 251 ms (ungefähr)

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());
P1DT3H4M5.5S