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

Temporal.ZonedDateTime.prototype.until()

Methode

Gibt ein neues <code>Temporal.Duration</code>-Objekt zurück: die Dauer von diesem <code>ZonedDateTime</code> bis zu einem anderen, optional mit Rundung und wählbarer größter Einheit.

seit JavaScript ES2026 (Temporal); Firefox 139+, in Chrome/Safari Kategorie: method-property

Signatur

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

Beschreibung

until() berechnet die Zeitspanne vom aktuellen Temporal.ZonedDateTime (this) bis zum Zeitpunkt other. Liegt other später, ist die Dauer positiv, sonst negativ. Die Methode ist das Gegenstück zu since(): a.until(b) ergibt dieselbe Dauer wie b.since(a).

Weil ein ZonedDateTime seine Zeitzone kennt, werden Sommerzeit-Wechsel richtig berücksichtigt. Standardmäßig ist largestUnit gleich "hours". Das Ergebnis enthält dann nur Stunden und kleinere Einheiten, also die tatsächlich vergangene Zeit. Mit "days", "weeks", "months" oder "years" wird nach Kalender gerechnet. Ein Tag kann dann 23 oder 25 Stunden lang sein.

Typische Einsätze sind Countdowns, die Dauer von Terminen, das Alter von Ereignissen und Abrechnungszeiträume. Mit smallestUnit, roundingIncrement und roundingMode rundest du das Ergebnis direkt, zum Beispiel auf volle Minuten oder auf 15-Minuten-Schritte.

Parameter

Name Typ Default Beschreibung
$other Pflicht Temporal.ZonedDateTime | string | object Der Endzeitpunkt. Strings (z. B. "2024-05-01T10:00[Europe/Berlin]") und passende Objekte werden wie bei Temporal.ZonedDateTime.from() umgewandelt. Beide Werte müssen denselben Kalender haben.
$options object {} Einstellungen für Einheiten und Rundung (siehe unten).
$options.largestUnit string "auto" (entspricht "hours") Größte Einheit im Ergebnis: "years", "months", "weeks", "days", "hours" … "nanoseconds". Einzahl ("year") ist ebenfalls erlaubt.
$options.smallestUnit string "nanoseconds" Kleinste Einheit im Ergebnis. Kleinere Anteile werden gerundet.
$options.roundingIncrement number 1 Rundungsschritt in smallestUnit, z. B. 15 für Viertelstunden. Bei Zeiteinheiten muss er die nächstgrößere Einheit ohne Rest teilen.
$options.roundingMode string "trunc" Rundungsart: "ceil", "floor", "expand", "trunc", "halfCeil", "halfFloor", "halfExpand", "halfTrunc", "halfEven".

Rückgabewert

Typ
Temporal.Duration
Beschreibung
Ein neues Temporal.Duration-Objekt. Es ist positiv, wenn other später liegt, und negativ, wenn es früher liegt.

Beispiele

Sommerzeit-Wechsel: echte Stunden oder Kalendertage

// In der Nacht zum 31.03.2024 wird die Uhr in Berlin vorgestellt
const start = Temporal.ZonedDateTime.from("2024-03-30T12:00[Europe/Berlin]");
const ende = Temporal.ZonedDateTime.from("2024-03-31T12:00[Europe/Berlin]");

console.log(start.until(ende).toString());
console.log(start.until(ende, { largestUnit: "days" }).toString());
PT23H P1D

Arbeitszeit auf angefangene Viertelstunden aufrunden

const beginn = Temporal.ZonedDateTime.from("2024-06-01T09:07:23[Europe/Berlin]");
const feierabend = Temporal.ZonedDateTime.from("2024-06-01T17:52:10[Europe/Berlin]");

const genau = beginn.until(feierabend);
const abgerechnet = beginn.until(feierabend, {
  smallestUnit: "minutes",
  roundingIncrement: 15,
  roundingMode: "ceil",
});

console.log(genau.toString());
console.log(abgerechnet.toString());
console.log(abgerechnet.total({ unit: "hours" }));
PT8H44M47S PT8H45M 8.75

Laufzeit in Jahren, Monaten und Tagen

const vertragsbeginn = Temporal.ZonedDateTime.from("2023-05-10T08:00[Europe/Berlin]");
const heute = Temporal.ZonedDateTime.from("2024-07-25T14:30[Europe/Berlin]");

const d = vertragsbeginn.until(heute, { largestUnit: "years" });
console.log(d.toString());
console.log(`${d.years} Jahr, ${d.months} Monate, ${d.days} Tage`);
P1Y2M15DT6H30M 1 Jahr, 2 Monate, 15 Tage

Verschiedene Zeitzonen und negatives Ergebnis

const berlin = Temporal.ZonedDateTime.from("2024-01-01T10:00[Europe/Berlin]");
const newYork = Temporal.ZonedDateTime.from("2024-01-01T10:00[America/New_York]");

console.log(berlin.until(newYork).toString()); // gleiche Uhrzeit, 6 h Versatz
console.log(newYork.until(berlin).toString()); // negativ, weil früher
console.log(newYork.until(berlin).sign);
PT6H -PT6H -1