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

Temporal.Duration.prototype.days

Eigenschaft

Liefert die Anzahl der Tage einer <code>Temporal.Duration</code> als ganze Zahl. Bei negativen Dauern ist der Wert negativ.

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

Signatur

get Temporal.Duration.prototype.days

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);
3 -5 -1

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" }));
0 2 2 2.0833333333333335

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);
74 2 14

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());
10 14 P14D

// Wichtig · Fallstricke

  • Nicht die Gesamtdauer: days enthält nur das Tage-Feld. Stunden, Wochen, Monate und Jahre werden nicht umgerechnet. Für die Gesamtzahl der Tage nimm total({ unit: "day" }). Enthält die Dauer Monate oder Jahre, musst du dabei relativeTo angeben, weil Monate und Jahre unterschiedlich lang sind.
  • Wochen bleiben getrennt: Temporal.Duration.from("P2W").days ergibt 0. Die Wochen stehen in weeks.
  • Tage sind nicht immer 24 Stunden lang: Mit ZonedDateTime kann ein Kalendertag wegen der Sommerzeit 23 oder 25 Stunden haben. Ohne relativeTo rechnet round() einen Tag als genau 24 Stunden.
  • Schreibgeschützt: Eine Zuweisung wie d.days = 3 hat keine Wirkung und wirft im Strict Mode einen TypeError. Nutze stattdessen with().
  • 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/polyfill oder temporal-polyfill.