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

Temporal.Instant.prototype.since()

Methode

Gibt ein <code>Temporal.Duration</code> zurück, das die Zeitspanne von <code>other</code> bis zu diesem Zeitpunkt angibt – positiv, wenn <code>other</code> früher liegt.

seit JavaScript Temporal (ES-Proposal Stufe 3) – Firefox 139+, Chr Kategorie: method-property

Signatur

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

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:
  • largestUnit: größte Einheit im Ergebnis, nämlich "hour", "minute", "second", "millisecond", "microsecond", "nanosecond" oder "auto". Standard ist "auto", was hier "second" bedeutet.
  • smallestUnit: kleinste Einheit, auf die gerundet wird. Standard ist "nanosecond", also keine Rundung.
  • roundingIncrement: Schrittweite beim Runden, z. B. 15 für 15-Minuten-Schritte. Standard ist 1.
  • roundingMode: z. B. "trunc" (Standard), "halfExpand", "ceil", "floor", "expand" oder "halfEven".
Auch die Einheiten im Plural ("hours") sind erlaubt.

Rückgabewert

Typ
Temporal.Duration
Beschreibung
Ein neues 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());
PT9015S PT2H30M15S -PT9015S

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`);
vor 103 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`);
Dauer: 251 ms (Wert schwankt)

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());
P3DT6H