Signatur
Beschreibung
until() berechnet den Abstand zwischen zwei Kalenderdaten ohne Uhrzeit und ohne Zeitzone. Das Ergebnis ist ein Temporal.Duration-Objekt. Es ist positiv, wenn other nach dem aktuellen Datum liegt, und negativ, wenn es davor liegt. Die Methode ist das Gegenstück zu since(): a.until(b) entspricht b.since(a).
Ohne Optionen gibt die Methode nur Tage zurück, zum Beispiel P344D. Mit largestUnit legen Sie fest, bis zu welcher Einheit das Ergebnis in Jahre, Monate oder Wochen aufgeteilt wird. Das ist nützlich für Altersangaben, Vertragslaufzeiten oder Countdowns wie „noch 2 Monate und 5 Tage“. Mit smallestUnit, roundingIncrement und roundingMode lässt sich das Ergebnis zusätzlich runden.
Die Berechnung berücksichtigt den Kalender, also unterschiedlich lange Monate und Schaltjahre. Deshalb ist sie verlässlicher als das Rechnen mit Millisekunden-Differenzen über Date. Beide Daten müssen denselben Kalender verwenden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $other Pflicht | Temporal.PlainDate | string | object | Das Zieldatum. Ein String wie "2024-12-24" oder ein Objekt wie { year, month, day } wird wie bei Temporal.PlainDate.from() umgewandelt. |
|
| $options | object | {} | Optionales Einstellungsobjekt mit folgenden Feldern:
|
Rückgabewert
Temporal.Duration vom aktuellen Datum bis other. Sie ist negativ, wenn other früher liegt. Zeitanteile (Stunden und kleiner) sind immer 0.Beispiele
Tage bis Weihnachten (Standardverhalten)
const start = Temporal.PlainDate.from("2024-01-15");
const heiligabend = Temporal.PlainDate.from("2024-12-24");
const dauer = start.until(heiligabend);
console.log(dauer.toString());
console.log(dauer.days);
// Umgekehrte Richtung ergibt eine negative Dauer
console.log(heiligabend.until(start).toString());
Alter in Jahren, Monaten und Tagen berechnen
const geburtstag = Temporal.PlainDate.from("1990-05-20");
const heute = Temporal.PlainDate.from("2025-03-10");
// In echtem Code: Temporal.Now.plainDateISO()
const alter = geburtstag.until(heute, { largestUnit: "year" });
console.log(alter.toString());
console.log(`${alter.years} Jahre, ${alter.months} Monate, ${alter.days} Tage`);
In Monate oder Wochen aufteilen und runden
const start = Temporal.PlainDate.from("2024-01-15");
const ende = Temporal.PlainDate.from("2024-12-24");
console.log(start.until(ende, { largestUnit: "month" }).toString());
console.log(start.until(ende, { largestUnit: "week" }).toString());
// Auf ganze Monate runden (kaufmännisch)
const gerundet = start.until(ende, {
smallestUnit: "month",
roundingMode: "halfExpand"
});
console.log(gerundet.toString());
Countdown mit String-Argument
const heute = Temporal.PlainDate.from("2025-06-01");
const rest = heute.until("2025-08-15", { largestUnit: "month" });
const text = rest.sign > 0
? `Noch ${rest.months} Monate und ${rest.days} Tage bis zum Urlaub`
: "Der Urlaub hat schon begonnen!";
console.log(text);
// Wichtig · Fallstricke
- Browser-Unterstützung: Temporal ist noch neu. Es gibt es ab Firefox 139 und Chrome/Edge 144. Safari und ältere Node.js-Versionen unterstützen es teilweise noch nicht. Dort brauchen Sie einen Polyfill wie
@js-temporal/polyfillodertemporal-polyfill. - Standard ist nur Tage: Ohne
largestUniterhalten Sie nie Jahre oder Monate, sondern z. B.P344D. Für Altersangaben setzen SielargestUnit: \"year\". - Keine Zeiteinheiten: Werte wie
\"hour\"oder\"minute\"fürlargestUnitodersmallestUnitlösen einenRangeErroraus. Für Uhrzeiten verwenden SieTemporal.PlainDateTimeoderTemporal.ZonedDateTime. - Kalender: Verwenden beide Daten unterschiedliche Kalender (z. B.
iso8601undhebrew), wird einRangeErrorausgelöst. - Standardmäßig wird abgeschnitten: Der Standard-
roundingModeist\"trunc\". Beim Runden mitsmallestUnitfallen Reste also weg, solange Sie keinen anderen Modus angeben. - Monate sind unterschiedlich lang: Eine Dauer wie
P1Mhat je nach Startdatum eine andere Anzahl Tage. Wenn Sie solche Dauern vergleichen oder umrechnen (Duration.compare(),total()), müssen SierelativeToangeben.