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

Temporal.ZonedDateTime.prototype.since()

Methode

Gibt eine <code>Temporal.Duration</code> zurück, die die Zeitspanne von <code>other</code> bis zu diesem <code>ZonedDateTime</code> angibt (<code>this − other</code>).

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

Signatur

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

Beschreibung

since() berechnet, wie viel Zeit zwischen einem anderen Zeitpunkt und der aktuellen Instanz liegt. Das Ergebnis ist ein neues Temporal.Duration-Objekt. Liegt other vor this, ist die Dauer positiv, liegt es danach, ist sie negativ. Die Methode ist das Gegenstück zu until(): a.since(b) ergibt ohne Rundung dasselbe wie b.until(a).

Für other nimmt die Methode alles an, was auch Temporal.ZonedDateTime.from() akzeptiert: eine ZonedDateTime-Instanz, ein Objekt mit Feldern oder eine Zeichenkette wie "2024-03-01T09:00[Europe/Berlin]". Beide Werte müssen denselben Kalender verwenden.

Standardmäßig ist largestUnit gleich "hour". Das Ergebnis wird also in Stunden, Minuten, Sekunden usw. angegeben und nicht in Tagen. So bleibt es eindeutig, auch wenn dazwischen eine Zeitumstellung liegt. Wer Tage, Monate oder Jahre braucht, setzt largestUnit ausdrücklich. Dann rechnet Temporal mit Kalendertagen, die je nach Zeitumstellung 23 oder 25 Stunden lang sein können. In diesem Fall müssen beide Werte dieselbe Zeitzone haben.

Typische Einsätze sind Countdowns, Anzeigen wie „vor X Stunden“, Arbeitszeitberechnung, Altersangaben und die Frage, wie lange ein Ereignis zurückliegt. Mit smallestUnit, roundingIncrement und roundingMode lässt sich das Ergebnis direkt passend runden.

Parameter

Name Typ Default Beschreibung
$other Pflicht Temporal.ZonedDateTime | object | string Der Vergleichszeitpunkt, der von this abgezogen wird. Wird bei Bedarf wie mit Temporal.ZonedDateTime.from() umgewandelt.
$options object {} Optionales Objekt mit Einstellungen zu Einheiten und Rundung (siehe unten).
$options.largestUnit string "hour" Größte Einheit im Ergebnis: "year", "month", "week", "day", "hour" … "nanosecond" oder "auto". Ab "day" aufwärts müssen die Zeitzonen übereinstimmen.
$options.smallestUnit string "nanosecond" Kleinste Einheit im Ergebnis. Kleinere Anteile werden gerundet.
$options.roundingIncrement number 1 Schrittweite beim Runden, bezogen auf smallestUnit (z. B. 15 bei Minuten).
$options.roundingMode string "trunc" Rundungsmodus: "trunc", "floor", "ceil", "expand", "halfExpand", "halfTrunc", "halfEven", "halfCeil", "halfFloor".

Rückgabewert

Typ
Temporal.Duration
Beschreibung
Eine neue Temporal.Duration für this − other. Sie ist positiv, wenn other früher liegt, und negativ, wenn es später liegt.

Beispiele

Arbeitszeit eines Tages berechnen

const start = Temporal.ZonedDateTime.from('2024-03-01T09:00[Europe/Berlin]');
const ende = Temporal.ZonedDateTime.from('2024-03-01T17:30[Europe/Berlin]');

const dauer = ende.since(start);
console.log(dauer.toString());
console.log(`${dauer.hours} h ${dauer.minutes} min`);

// Umgekehrt: negative Dauer
console.log(start.since(ende).toString());
PT8H30M 8 h 30 min -PT8H30M

Zeitumstellung: Stunden gegenüber Kalendertagen

// In der Nacht zum 31.03.2024 wird in Berlin auf Sommerzeit umgestellt
const vorher = Temporal.ZonedDateTime.from('2024-03-30T12:00[Europe/Berlin]');
const nachher = Temporal.ZonedDateTime.from('2024-03-31T12:00[Europe/Berlin]');

console.log(nachher.since(vorher).toString());                         // Standard: Stunden
console.log(nachher.since(vorher, { largestUnit: 'day' }).toString()); // Kalendertag
PT23H P1D

„vor X Stunden“-Anzeige mit Rundung

const jetzt = Temporal.ZonedDateTime.from('2024-06-15T14:45:20+02:00[Europe/Berlin]');
const beitrag = Temporal.ZonedDateTime.from('2024-06-15T11:10:00+02:00[Europe/Berlin]');

const vergangen = jetzt.since(beitrag, { smallestUnit: 'hour' });
const rtf = new Intl.RelativeTimeFormat('de', { numeric: 'auto' });

console.log(jetzt.since(beitrag).toString());
console.log(rtf.format(-vergangen.hours, 'hour'));
PT3H35M20S vor 3 Stunden

Alter in Jahren, Monaten und Tagen

const geburt = Temporal.ZonedDateTime.from('1990-08-20T08:15[Europe/Berlin]');
const heute = Temporal.ZonedDateTime.from('2024-06-15T14:45[Europe/Berlin]');

const alter = heute.since(geburt, { largestUnit: 'year', smallestUnit: 'day' });
console.log(alter.toString());
console.log(`${alter.years} Jahre, ${alter.months} Monate, ${alter.days} Tage`);
P33Y9M26D 33 Jahre, 9 Monate, 26 Tage