Signatur
Beschreibung
Der Konstruktor Temporal.PlainTime() erzeugt eine reine Uhrzeit wie „14:30:00“. Ein Datum, eine Zeitzone oder ein Kalender gehören nicht dazu. Das passt für wiederkehrende Zeitangaben wie Öffnungszeiten, Weckzeiten, Beginn einer Schicht oder Zeitfenster in Fahrplänen, bei denen der konkrete Tag keine Rolle spielt.
Alle sechs Komponenten sind optional und haben den Standardwert 0. Der Konstruktor ist streng: Ein Wert außerhalb des gültigen Bereichs (z. B. hour = 24 oder minute = 60) löst einen RangeError aus. Der Wert wird also nicht stillschweigend begrenzt oder in die nächste Einheit übertragen. Nachkommastellen werden abgeschnitten.
In den meisten Fällen ist Temporal.PlainTime.from() die bessere Wahl. Diese Methode nimmt ISO-Strings ("14:30") oder Objekte ({ hour: 14, minute: 30 }) entgegen und kann Werte über die Option overflow: "constrain" auf den gültigen Bereich begrenzen. Den Konstruktor nimmt man, wenn die einzelnen Zahlen schon geprüft vorliegen.
Ein PlainTime-Objekt ist unveränderlich. Methoden wie add(), with() oder round() geben immer ein neues Objekt zurück. Rechnungen laufen über Mitternacht hinweg im Kreis weiter, 23:00 plus 2 Stunden ergibt also 01:00.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $hour | number | 0 | Stunde, ganzzahlig von 0 bis 23. |
| $minute | number | 0 | Minute, 0 bis 59. |
| $second | number | 0 | Sekunde, 0 bis 59. Schaltsekunden (60) sind nicht erlaubt. |
| $millisecond | number | 0 | Millisekunde, 0 bis 999. |
| $microsecond | number | 0 | Mikrosekunde, 0 bis 999. |
| $nanosecond | number | 0 | Nanosekunde, 0 bis 999. |
Rückgabewert
Temporal.PlainTime-Objekt mit den angegebenen Zeitkomponenten.Beispiele
Uhrzeiten erzeugen und ausgeben
const start = new Temporal.PlainTime(14, 30);
const genau = new Temporal.PlainTime(9, 5, 3, 250);
const mitternacht = new Temporal.PlainTime();
console.log(start.toString());
console.log(genau.toString());
console.log(mitternacht.toString());
console.log(start.hour, start.minute);
Schichtende berechnen (über Mitternacht hinweg)
const schichtBeginn = new Temporal.PlainTime(22, 0);
const schichtEnde = schichtBeginn.add({ hours: 8, minutes: 30 });
console.log(`Schicht: ${schichtBeginn} – ${schichtEnde}`);
Prüfen, ob ein Geschäft geöffnet ist
const oeffnet = new Temporal.PlainTime(8, 0);
const schliesst = new Temporal.PlainTime(18, 30);
const istGeoeffnet = (zeit) =>
Temporal.PlainTime.compare(zeit, oeffnet) >= 0 &&
Temporal.PlainTime.compare(zeit, schliesst) < 0;
console.log(istGeoeffnet(new Temporal.PlainTime(12, 15)));
console.log(istGeoeffnet(new Temporal.PlainTime(19, 0)));
// Aktuelle lokale Uhrzeit:
console.log(istGeoeffnet(Temporal.Now.plainTimeISO()));
Konstruktor ist streng – from() kann begrenzen
try {
new Temporal.PlainTime(24, 0);
} catch (err) {
console.log(err.name);
}
const begrenzt = Temporal.PlainTime.from(
{ hour: 25, minute: 75 },
{ overflow: "constrain" }
);
console.log(begrenzt.toString());
// Wichtig · Fallstricke
- Browser-Unterstützung: Temporal ist neu und kommt aus einem TC39-Proposal. Firefox (ab 139) und Chromium-Browser (ab 144) unterstützen es, Safari noch nicht. Für ältere Umgebungen gibt es Polyfills wie
@js-temporal/polyfillodertemporal-polyfill. Vor dem Einsatz sollte man die Unterstützung prüfen, z. B. mittypeof Temporal !== "undefined". - Nur mit
new: WirdTemporal.PlainTime()ohnenewaufgerufen, gibt es einenTypeError. - Keine Überträge:
new Temporal.PlainTime(10, 90)ergibt nicht 11:30, sondern einenRangeError. Für Überträge rechnet man mitadd(), z. B.new Temporal.PlainTime(10).add({ minutes: 90 }). - Keine Strings: Der Konstruktor parst keine Uhrzeiten wie
"14:30". Dafür gibt esTemporal.PlainTime.from("14:30"). - Nicht mit
</>vergleichen: Der Vergleich per<oder>löst einenTypeErroraus, weilvalueOf()absichtlich einen Fehler wirft. Zum Vergleichen nimmt manTemporal.PlainTime.compare()oderequals(). - Die Uhrzeit hat weder Zeitzone noch Datum, Zeitumstellungen werden also nicht berücksichtigt. Für einen konkreten Zeitpunkt kombiniert man sie z. B. mit
Temporal.PlainDate.prototype.toPlainDateTime()und dann mittoZonedDateTime().