Signatur
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
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());
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`);
}
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 })));
// Wichtig · Fallstricke
- Keine gemischten Vorzeichen: Ein Aufruf wie
Temporal.Duration.from({ hours: 1, minutes: -30 })wirft einenRangeError. Deshalb kannsignnie mehrdeutig sein. - Nur lesbar: Eine Zuweisung wie
dauer.sign = -1ändert nichts und wirft im Strict Mode einenTypeError. Mitnegated()oderabs()erhält man eine neue Dauer mit anderem Vorzeichen. sign === 0hat dieselbe Bedeutung wiedauer.blank === true.signist nicht für den Größenvergleich zweier Dauern gedacht. Dafür gibt esTemporal.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/polyfillodertemporal-polyfill.