Start · Sprachen · JavaScript · Referenz · Temporal.Duration.prototype.sign

Temporal.Duration.prototype.sign

Eigenschaft

Liefert das Vorzeichen einer <code>Temporal.Duration</code>: <code>1</code> für positive, <code>-1</code> für negative und <code>0</code> für leere Dauern.

seit JavaScript ES2026 (Temporal); Firefox 139+, Chrome 144+, Safa Kategorie: method-property

Signatur

get Temporal.Duration.prototype.sign

Beschreibung

Die Zugriffs-Eigenschaft sign gibt die Richtung einer Temporal.Duration als Zahl an: 1, wenn die Dauer positiv ist, -1, wenn sie negativ ist, und 0, wenn alle Felder null sind. Sie ist nur lesbar. Einen Setter gibt es nicht.

Eine Temporal-Dauer kann keine gemischten Vorzeichen haben. Alle Felder (years, months, …, nanoseconds) sind entweder alle ≥ 0 oder alle ≤ 0. Deshalb beschreibt sign immer eindeutig die Richtung der ganzen Dauer. Man muss nicht die einzelnen Felder prüfen.

Typische Einsätze sind Ergebnisse von until(), since() oder subtract(), bei denen man vorher nicht weiß, in welche Richtung der Unterschied zeigt. Beispiele: „in 3 Tagen“ oder „vor 3 Tagen“ anzeigen, eine abgelaufene Frist erkennen oder eine Dauer mit abs() normalisieren und das Vorzeichen getrennt auswerten.

Rückgabewert

Typ
-1 | 0 | 1
Beschreibung
1 bei positiver Dauer, -1 bei negativer Dauer, 0 bei einer Dauer, deren Felder alle null sind.

Beispiele

Grundlegende Werte von sign

const zweiStunden = Temporal.Duration.from({ hours: 2 });
const minusZwei = zweiStunden.negated();
const leer = new Temporal.Duration();

console.log(zweiStunden.sign, zweiStunden.toString());
console.log(minusZwei.sign, minusZwei.toString());
console.log(leer.sign, leer.toString());
1 PT2H -1 -PT2H 0 PT0S

Richtung eines Datumsunterschieds erkennen

const heute = Temporal.PlainDate.from("2024-03-01");
const frist = Temporal.PlainDate.from("2024-01-15");

const rest = heute.until(frist);
console.log(rest.toString(), rest.sign);

if (rest.sign < 0) {
  console.log(`Frist seit ${rest.abs().days} Tagen abgelaufen`);
}
-P46D -1 Frist seit 46 Tagen abgelaufen

Relative Zeitangabe mit sign und abs()

const relativ = (dauer) => {
  const betrag = dauer.abs().total({ unit: "hours" });
  switch (dauer.sign) {
    case 1: return `in ${betrag} Stunden`;
    case -1: return `vor ${betrag} Stunden`;
    default: return "jetzt";
  }
};

console.log(relativ(Temporal.Duration.from({ hours: 5 })));
console.log(relativ(Temporal.Duration.from({ hours: -3 })));
console.log(relativ(Temporal.Duration.from({ minutes: 0 })));
in 5 Stunden vor 3 Stunden jetzt

// Wichtig · Fallstricke

  • Keine gemischten Vorzeichen: Ein Aufruf wie Temporal.Duration.from({ hours: 1, minutes: -30 }) wirft einen RangeError. Deshalb kann sign nie mehrdeutig sein.
  • Nur lesbar: Eine Zuweisung wie dauer.sign = -1 ändert nichts und wirft im Strict Mode einen TypeError. Mit negated() oder abs() erhält man eine neue Dauer mit anderem Vorzeichen.
  • sign === 0 hat dieselbe Bedeutung wie dauer.blank === true.
  • sign ist nicht für den Größenvergleich zweier Dauern gedacht. Dafür gibt es Temporal.Duration.compare().
  • Kompatibilität: Temporal ist noch nicht in allen Browsern verfügbar, z. B. nicht in Safari. Für ältere Umgebungen gibt es das Polyfill @js-temporal/polyfill oder temporal-polyfill.