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

Temporal.Duration.prototype.hours

Eigenschaft

Gibt die Anzahl der Stunden einer <code>Temporal.Duration</code> als Ganzzahl zurück, und zwar genau so, wie sie gespeichert ist, ohne Umrechnung von Minuten oder Tagen.

seit JavaScript Temporal (ES2026-Kandidat): Firefox 139+, Chrome/E Kategorie: method-property

Signatur

get Temporal.Duration.prototype.hours

Beschreibung

Die Zugriffseigenschaft hours liefert das Stunden-Feld einer Temporal.Duration. Eine Dauer besteht aus zehn getrennten Feldern (years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds). hours gibt nur den Wert dieses einen Feldes zurück.

Wichtig: Temporal gleicht Dauern nicht automatisch aus. Temporal.Duration.from({ minutes: 90 }) hat den hours-Wert 0 und nicht 1. Umgekehrt zählt hours bei P1DT2H nur die 2 Stunden, der Tag wird nicht mitgerechnet. Die Stunden in ausgeglichener Form bekommst du mit round({ largestUnit: "hours" }). Die Gesamtzahl der Stunden als Dezimalzahl liefert total({ unit: "hours" }).

Der Wert ist immer eine ganze Zahl. Sein Vorzeichen stimmt mit dem Vorzeichen der ganzen Dauer überein: Bei negativen Dauern ist er negativ oder 0. Die Eigenschaft kann nur gelesen werden, denn Temporal.Duration ist unveränderlich. Einen geänderten Wert bekommst du mit with({ hours: … }), das eine neue Instanz zurückgibt.

Rückgabewert

Typ
number
Beschreibung
Ganzzahl mit dem Stunden-Feld der Dauer. Sie ist negativ, wenn die Dauer negativ ist, und 0, wenn keine Stunden angegeben sind.

Beispiele

Stunden aus einem ISO-8601-String lesen

const dauer = Temporal.Duration.from("PT1H30M");
console.log(dauer.hours);   // Stunden-Feld
console.log(dauer.minutes); // Minuten-Feld

const negativ = Temporal.Duration.from("-PT3H");
console.log(negativ.hours);
1 30 -3

Arbeitszeit zwischen zwei Uhrzeiten

const beginn = Temporal.PlainTime.from("09:15");
const ende = Temporal.PlainTime.from("17:45");

const arbeitszeit = ende.since(beginn); // PT8H30M
console.log(`${arbeitszeit.hours} Std. ${arbeitszeit.minutes} Min.`);
8 Std. 30 Min.

Fallstrick: keine automatische Umrechnung

const d = Temporal.Duration.from({ minutes: 90 });
console.log(d.hours); // 0 – 90 Minuten werden nicht umgerechnet

const ausgeglichen = d.round({ largestUnit: "hours" });
console.log(ausgeglichen.hours, ausgeglichen.minutes);

console.log(d.total({ unit: "hours" })); // Dezimalwert
0 1 30 1.5

Differenz zweier Zeitpunkte in Stunden

const start = Temporal.PlainDateTime.from("2024-03-01T08:00");
const ziel = Temporal.PlainDateTime.from("2024-03-03T10:00");

// Standardmäßig ist die größte Einheit 'days'
console.log(start.until(ziel).hours); // nur Rest-Stunden (P2DT2H)

// Mit largestUnit alles in Stunden
console.log(start.until(ziel, { largestUnit: "hours" }).hours);

// Neue Dauer mit geändertem Stunden-Feld
console.log(Temporal.Duration.from("PT2H").with({ hours: 5 }).toString());
2 50 PT5H

// Wichtig · Fallstricke

  • Nicht ausgeglichen: hours enthält weder Tage noch überzählige Minuten. Für Anzeigen solltest du vorher round({ largestUnit: "hours" }) aufrufen oder mit total({ unit: "hours" }) arbeiten.
  • Größte Einheit bei since()/until(): PlainDateTime und ZonedDateTime verwenden standardmäßig largestUnit: "days". Bei PlainTime ist es "hours". Das erklärt, warum hours manchmal unerwartet klein ist.
  • Zeitzonen: Bei ZonedDateTime kann ein Tag wegen der Zeitumstellung 23 oder 25 Stunden haben. Stunden, die über Tagesgrenzen hinaus exakt stimmen müssen, bekommst du mit largestUnit: "hours".
  • Nur lesbar: Eine Zuweisung wie d.hours = 3 wirkt nicht und löst im Strict Mode einen TypeError aus. Nutze stattdessen with().
  • Kompatibilität: Temporal ist noch recht neu (Firefox 139+, Chromium 144+). Safari und ältere Node.js-Versionen unterstützen es noch nicht. Dort brauchst du einen Polyfill wie @js-temporal/polyfill oder temporal-polyfill.