Start · Sprachen · JavaScript · Referenz · Temporal.PlainTime

Temporal.PlainTime

Klasse

Repräsentiert eine tageszeit-basierte Uhrzeit ohne Datum und Zeitzone, z. B. für täglich wiederkehrende Ereignisse.

seit JavaScript Stage 3 Proposal (TC39); experimentelle Browser-Un Kategorie: core

Signatur

class Temporal.PlainTime

Beschreibung

Temporal.PlainTime ist Teil der Temporal-API und modelliert eine reine Tageszeit (Stunden, Minuten, Sekunden, Millisekunden, Mikrosekunden, Nanosekunden) ohne Datumsbezug und ohne Zeitzoneninformation. Typische Anwendungsfälle sind Öffnungszeiten, Stundenplan-Einträge oder Alarme, die jeden Tag zur gleichen Uhrzeit wiederholen.

Temporal.PlainTime-Objekte sind unveränderlich (immutable). Alle Operationen wie add(), subtract() oder with() geben ein neues Objekt zurück. Die Zeitkomponenten werden in einem 24-Stunden-Format mit Nanosekundenauflösung gespeichert.

Im Gegensatz zu Date enthält PlainTime keine Datums- oder Zeitzonendaten, was Mehrdeutigkeiten bei Sommerzeit-Umstellungen oder Zeitzonen-Offsets von vornherein ausschließt. Zum Kombinieren mit einem Datum kann PlainDate.prototype.toPlainDateTime() zusammen mit einer PlainTime verwendet werden.

Zum Parsen eines ISO-8601-Zeitstrings steht Temporal.PlainTime.from() zur Verfügung. Vergleiche zwischen zwei Instanzen erfolgen über Temporal.PlainTime.compare() oder die Instanzmethode equals().

Parameter

Name Typ Default Beschreibung
$hour number 0 Stunde im Bereich 0–23.
$minute number 0 Minute im Bereich 0–59.
$second number 0 Sekunde im Bereich 0–59.
$millisecond number 0 Millisekunde im Bereich 0–999.
$microsecond number 0 Mikrosekunde im Bereich 0–999.
$nanosecond number 0 Nanosekunde im Bereich 0–999.

Rückgabewert

Typ
Temporal.PlainTime
Beschreibung
Eine neue, unveränderliche Temporal.PlainTime-Instanz mit den angegebenen Zeitkomponenten.

Beispiele

Einfache Uhrzeit erstellen und ausgeben

// Erstellt eine Uhrzeit für 09:30:00
const morgenBesprechung = new Temporal.PlainTime(9, 30);

console.log(morgenBesprechung.toString());      // '09:30:00'
console.log(morgenBesprechung.hour);            // 9
console.log(morgenBesprechung.minute);          // 30

// Aus einem ISO-String parsen
const mittagspause = Temporal.PlainTime.from('12:00:00');
console.log(mittagspause.toString());           // '12:00:00'
09:30:00 9 30 12:00:00

Zeiten vergleichen, addieren und mit Datum kombinieren

const oeffnung = new Temporal.PlainTime(8, 0);
const schliessung = new Temporal.PlainTime(18, 0);

// Vergleich: gibt -1, 0 oder 1 zurück
const vergleich = Temporal.PlainTime.compare(oeffnung, schliessung);
console.log(vergleich); // -1 (Öffnung liegt vor Schließung)

// Zeitdauer addieren
const sitzungsende = oeffnung.add({ hours: 1, minutes: 30 });
console.log(sitzungsende.toString()); // '09:30:00'

// Prüfen ob aktuelle Zeit innerhalb der Öffnungszeiten liegt
const jetzt = Temporal.Now.plainTimeISO();
const istOffen =
  Temporal.PlainTime.compare(jetzt, oeffnung) >= 0 &&
  Temporal.PlainTime.compare(jetzt, schliessung) < 0;
console.log(`Geöffnet: ${istOffen}`);

// Mit einem Datum zu PlainDateTime kombinieren
const heute = Temporal.Now.plainDateISO();
const naechsteBesprechung = heute.toPlainDateTime(new Temporal.PlainTime(14, 30));
console.log(naechsteBesprechung.toString()); // z. B. '2025-06-10T14:30:00'
-1 09:30:00 Geöffnet: true/false (laufzeitabhängig) 2025-06-10T14:30:00 (Datum laufzeitabhängig)

// Wichtig · Fallstricke

Browser-Unterstützung: Die Temporal-API befindet sich noch im TC39-Stage-3-Prozess. Ab 2025 bieten einige Browser experimentelle Unterstützung; für Produktionsumgebungen wird derzeit der Polyfill @js-temporal/polyfill empfohlen.

  • Unveränderlichkeit: Alle Mutationsmethoden wie with(), add() und subtract() geben immer eine neue Instanz zurück — die ursprüngliche Instanz bleibt unverändert.
  • Überlauf: Beim Addieren von Dauern, die über Mitternacht hinausgehen, wird standardmäßig ein Wrap-around (Modulo 24 h) durchgeführt. Das Verhalten kann über den overflow-Parameter gesteuert werden.
  • Keine Zeitzoneninformation: PlainTime enthält keinerlei Offset- oder Zeitzonen-Daten. Für zeitzonenbewusste Zeitpunkte muss Temporal.ZonedDateTime verwendet werden.
  • Stringdarstellungen folgen dem ISO-8601-Format HH:mm:ss (ggf. mit Sub-Sekunden-Anteil).