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

Temporal.PlainDateTime.prototype.until()

Methode

Berechnet die Dauer von diesem <code>PlainDateTime</code> bis zu einem anderen Datum-Zeitpunkt und gibt sie als neues <code>Temporal.Duration</code> zurück.

seit JavaScript Temporal (TC39-Vorschlag, Stage 3); Firefox 139+, Kategorie: method-property

Signatur

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

Beschreibung

until() berechnet den Abstand zwischen zwei Datum-Zeitpunkten ohne Zeitzone, also vom eigenen Wert (this) bis zu other. Liegt other später, ist die Dauer positiv, liegt er früher, ist sie negativ. Die Methode entspricht since() mit vertauschten Argumenten: a.until(b) liefert dasselbe wie b.since(a).

Wie das Ergebnis aufgeteilt wird, legen Sie über options fest. Standardmäßig ist die größte Einheit "day". Sie erhalten also Tage, Stunden, Minuten usw., aber keine Monate oder Jahre. Mit largestUnit: "month" oder "year" rechnet die Methode kalenderbewusst, berücksichtigt also unterschiedlich lange Monate und Schaltjahre. Mit smallestUnit, roundingIncrement und roundingMode können Sie das Ergebnis runden, etwa auf volle Viertelstunden.

Weil PlainDateTime keine Zeitzone kennt, geht die Berechnung immer davon aus, dass jeder Tag 24 Stunden hat. Sommerzeit-Umstellungen spielen deshalb keine Rolle. Das ist praktisch für Zeitangaben wie „Beginn des Termins laut Kalender“, aber falsch, wenn es um die tatsächlich vergangene Zeit an einem bestimmten Ort geht. Dafür nutzen Sie Temporal.ZonedDateTime.prototype.until().

Parameter

Name Typ Default Beschreibung
$other Pflicht Temporal.PlainDateTime | Temporal.PlainDate | Temporal.ZonedDateTime | Object | string Der Ziel-Datum-Zeitpunkt. Er wird wie bei Temporal.PlainDateTime.from() umgewandelt, z. B. aus einem ISO-8601-String wie "2024-03-15T17:30" oder einem Objekt mit year, month, day usw.
$options Object {} Optionen für Einheiten und Rundung, siehe die folgenden Einträge.
$options.largestUnit string "auto" (entspricht "day") Größte Einheit im Ergebnis: "year", "month", "week", "day", "hour", "minute", "second", "millisecond", "microsecond", "nanosecond" oder "auto". Pluralformen wie "days" sind auch erlaubt.
$options.smallestUnit string "nanosecond" Kleinste Einheit im Ergebnis. Alles, was kleiner ist, wird gerundet. Sie darf nicht größer sein als largestUnit.
$options.roundingIncrement number 1 Rundungsschritt in smallestUnit, z. B. 15 zusammen mit "minute" für Viertelstunden. Bei Zeiteinheiten muss die nächstgrößere Einheit ohne Rest durch diesen Wert teilbar sein.
$options.roundingMode string "trunc" Rundungsart: "ceil", "floor", "expand", "trunc", "halfCeil", "halfFloor", "halfExpand", "halfTrunc" oder "halfEven".

Rückgabewert

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

Beispiele

Einfache Differenz (Standard: Tage als größte Einheit)

const start = Temporal.PlainDateTime.from("2024-01-01T08:00");
const end = Temporal.PlainDateTime.from("2024-03-15T17:30");

const dauer = start.until(end);
console.log(dauer.toString());
console.log(dauer.days, dauer.hours, dauer.minutes);
P74DT9H30M 74 9 30

Kalenderbewusst mit Monaten und nur in Stunden

const start = Temporal.PlainDateTime.from("2024-01-01T08:00");
const end = Temporal.PlainDateTime.from("2024-03-15T17:30");

console.log(start.until(end, { largestUnit: "month" }).toString());
console.log(start.until(end, { largestUnit: "hour" }).toString());

// Umgekehrte Richtung ergibt eine negative Dauer
console.log(end.until(start).toString());
P2M14DT9H30M PT1785H30M -P74DT9H30M

Arbeitszeit auf Viertelstunden runden

const kommen = Temporal.PlainDateTime.from("2024-06-03T08:07");
const gehen = Temporal.PlainDateTime.from("2024-06-03T16:52");

const gebucht = kommen.until(gehen, {
  largestUnit: "hour",
  smallestUnit: "minute",
  roundingIncrement: 15,
  roundingMode: "halfExpand",
});

console.log(gebucht.toString());
console.log(`${gebucht.hours} h ${gebucht.minutes} min`);
PT8H45M 8 h 45 min

Countdown bis zu einem Termin

const jetzt = Temporal.Now.plainDateTimeISO();
const termin = Temporal.PlainDateTime.from("2030-12-24T18:00");

const rest = jetzt.until(termin, {
  largestUnit: "day",
  smallestUnit: "minute",
});

console.log(`Noch ${rest.days} Tage, ${rest.hours} Stunden, ${rest.minutes} Minuten`);
Noch … Tage, … Stunden, … Minuten (hängt vom aktuellen Zeitpunkt ab)