Signatur
Beschreibung
Die Methode since() berechnet die Differenz dieser Zeitpunkt minus other und liefert sie als neues Temporal.Duration-Objekt. Liegt other in der Vergangenheit, ist die Dauer positiv, sonst negativ. other kann ein Temporal.Instant oder alles sein, was Temporal.Instant.from() akzeptiert, z. B. ein RFC-9557-/ISO-8601-String mit Offset wie "2024-01-01T00:00:00Z".
Ein Instant ist ein exakter Zeitpunkt ohne Zeitzone und ohne Kalender. Deshalb kann since() nur mit festen Zeiteinheiten rechnen: Stunden, Minuten, Sekunden und kleineren Einheiten. Standardmäßig wird das Ergebnis in Sekunden (plus Bruchteilen) ausgedrückt, also z. B. PT9015S statt PT2H30M15S. Mit largestUnit wählst du eine größere Einheit.
Typische Einsatzfälle sind die Messung vergangener Zeit („vor wie vielen Minuten wurde der Beitrag veröffentlicht?“), Timeouts und Protokollierung. Mit smallestUnit, roundingIncrement und roundingMode kannst du das Ergebnis direkt runden, statt es nachträglich zu bearbeiten.
a.since(b) ergibt dasselbe wie b.until(a). Nur beim Runden unterscheiden sie sich, weil die Rundungsrichtung umgekehrt wird.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $other Pflicht | Temporal.Instant | string | Der Zeitpunkt, der von diesem Instant abgezogen wird. Strings müssen einen Offset oder Z enthalten und werden mit Temporal.Instant.from() umgewandelt. |
|
| $options | object | {} | Optionales Objekt mit folgenden Einstellungen:
"hours") sind erlaubt. |
Rückgabewert
Temporal.Duration-Objekt mit der Zeitspanne von other bis zu diesem Instant. Es ist negativ, wenn other später liegt.Beispiele
Differenz zweier Zeitpunkte
const start = Temporal.Instant.from("2024-01-01T00:00:00Z");
const ende = Temporal.Instant.from("2024-01-01T02:30:15Z");
// Standard: größte Einheit ist die Sekunde
console.log(ende.since(start).toString());
// Mit Stunden als größter Einheit
console.log(ende.since(start, { largestUnit: "hour" }).toString());
// Umgekehrte Reihenfolge ergibt eine negative Dauer
console.log(start.since(ende).toString());
Relative Zeitangabe „vor X Minuten“
const veroeffentlicht = Temporal.Instant.from("2024-05-10T08:00:00Z");
const jetzt = Temporal.Instant.from("2024-05-10T09:42:50Z"); // in der Praxis: Temporal.Now.instant()
const dauer = jetzt.since(veroeffentlicht, {
largestUnit: "minute",
smallestUnit: "minute",
roundingMode: "halfExpand"
});
console.log(`vor ${dauer.minutes} Minuten`);
Laufzeit einer asynchronen Operation messen
const messen = async (fn) => {
const start = Temporal.Now.instant();
await fn();
const dauer = Temporal.Now.instant().since(start, {
smallestUnit: "millisecond"
});
return dauer.total("millisecond");
};
const ms = await messen(() => new Promise((r) => setTimeout(r, 250)));
console.log(`Dauer: ${ms} ms`);
Differenz in Tagen über ZonedDateTime
const a = Temporal.Instant.from("2024-03-01T00:00:00Z");
const b = Temporal.Instant.from("2024-03-04T06:00:00Z");
// a.since(...) mit largestUnit: "day" würde einen RangeError werfen
const tage = b.toZonedDateTimeISO("UTC")
.since(a.toZonedDateTimeISO("UTC"), { largestUnit: "day" });
console.log(tage.toString());