Signatur
Beschreibung
Die schreibgeschützte Zugriffs-Eigenschaft days gibt das Tage-Feld einer Temporal.Duration zurück. Der Wert ist immer eine ganze Zahl. Bei einer negativen Dauer (sign === -1) ist er negativ oder 0.
Wichtig: days liefert nur das gespeicherte Feld und nicht die Gesamtdauer in Tagen. Eine Dauer wird nicht automatisch ausgeglichen: Temporal.Duration.from({ hours: 48 }).days ergibt 0 und nicht 2. Genauso liefert P1M3D den Wert 3, der Monat wird nicht mitgezählt.
Brauchst du die Dauer vollständig in Tagen umgerechnet, nimm duration.total({ unit: "day" }). Willst du Stunden zu Tagen zusammenfassen, nimm duration.round({ largestUnit: "day" }). Welche Felder beim Rechnen mit Datumswerten belegt werden, steuerst du bei until() bzw. since() mit der Option largestUnit.
Weil Temporal.Duration unveränderlich ist, kannst du days nicht direkt setzen. Mit duration.with({ days: n }) erzeugst du eine neue Dauer.
Beispiele
Tage-Anteil aus einer ISO-8601-Dauer lesen
const d = Temporal.Duration.from("P1Y2M3DT4H");
console.log(d.days);
const neg = Temporal.Duration.from("-P5D");
console.log(neg.days, neg.sign);
Kein automatischer Ausgleich: round() und total() nutzen
const d = Temporal.Duration.from({ hours: 50 });
console.log(d.days); // Feld ist nicht belegt
const balanced = d.round({ largestUnit: "day" });
console.log(balanced.days, balanced.hours);
console.log(d.total({ unit: "day" }));
Tage bis zu einem Termin berechnen
const heute = Temporal.PlainDate.from("2024-01-01");
const deadline = Temporal.PlainDate.from("2024-03-15");
// Standard bei PlainDate: largestUnit "day"
console.log(heute.until(deadline).days);
// Mit Monaten: days enthält nur noch den Rest
const mitMonaten = heute.until(deadline, { largestUnit: "month" });
console.log(mitMonaten.months, mitMonaten.days);
Tage-Feld unveränderlich ersetzen
const urlaub = Temporal.Duration.from({ days: 10 });
const verlaengert = urlaub.with({ days: urlaub.days + 4 });
console.log(urlaub.days, verlaengert.days, verlaengert.toString());
// Wichtig · Fallstricke
- Nicht die Gesamtdauer:
daysenthält nur das Tage-Feld. Stunden, Wochen, Monate und Jahre werden nicht umgerechnet. Für die Gesamtzahl der Tage nimmtotal({ unit: "day" }). Enthält die Dauer Monate oder Jahre, musst du dabeirelativeToangeben, weil Monate und Jahre unterschiedlich lang sind. - Wochen bleiben getrennt:
Temporal.Duration.from("P2W").daysergibt0. Die Wochen stehen inweeks. - Tage sind nicht immer 24 Stunden lang: Mit
ZonedDateTimekann ein Kalendertag wegen der Sommerzeit 23 oder 25 Stunden haben. OhnerelativeTorechnetround()einen Tag als genau 24 Stunden. - Schreibgeschützt: Eine Zuweisung wie
d.days = 3hat keine Wirkung und wirft im Strict Mode einenTypeError. Nutze stattdessenwith(). - Kompatibilität: Temporal ist neu. Es wird ab Firefox 139 und Chrome/Edge 144 unterstützt, Safari unterstützt es noch nicht vollständig. Für ältere Umgebungen gibt es Polyfills wie
@js-temporal/polyfillodertemporal-polyfill.