Signatur
Beschreibung
toPlainTime() nimmt aus einem Temporal.ZonedDateTime nur die Uhrzeit heraus: Stunde, Minute, Sekunde, Millisekunde, Mikrosekunde und Nanosekunde. Maßgeblich ist dabei die Uhrzeit, die in der Zeitzone des Objekts auf der Wanduhr steht. Datum, Zeitzone, Offset und Kalender gehören nicht zum Ergebnis.
Die Methode ist nützlich, wenn nur die Uhrzeit zählt, zum Beispiel bei:
- Öffnungszeiten,
- täglich wiederkehrenden Terminen,
- dem Vergleich mit einer festen Uhrzeit, etwa „vor 9:00 Uhr?“,
- der Anzeige einer Uhrzeit.
Das Ergebnis ist ein Temporal.PlainTime und hängt nicht mehr an einem bestimmten Zeitpunkt. Wenn du daraus wieder einen absoluten Zeitpunkt brauchst, musst du Datum und Zeitzone neu angeben, zum Beispiel mit PlainTime.prototype.toZonedDateTime() oder mit ZonedDateTime.prototype.withPlainTime().
Wie alle Temporal-Objekte sind ZonedDateTime und PlainTime unveränderlich. Die Methode erzeugt also immer ein neues Objekt und ändert das ursprüngliche nicht.
Rückgabewert
Temporal.PlainTime mit der Wanduhrzeit (Stunde bis Nanosekunde) dieses ZonedDateTime in seiner Zeitzone.Beispiele
Uhrzeit aus einem Zeitpunkt mit Zeitzone herauslösen
const zdt = Temporal.ZonedDateTime.from(
"2024-03-15T14:30:45.123[Europe/Berlin]"
);
const time = zdt.toPlainTime();
console.log(time.toString());
console.log(time.hour, time.minute);
Derselbe Zeitpunkt, unterschiedliche Uhrzeiten je Zeitzone
const meeting = Temporal.ZonedDateTime.from(
"2024-06-01T09:00[America/New_York]"
);
console.log(meeting.toPlainTime().toString());
console.log(meeting.withTimeZone("Europe/Berlin").toPlainTime().toString());
console.log(meeting.withTimeZone("Asia/Tokyo").toPlainTime().toString());
Prüfen, ob ein Geschäft gerade geöffnet hat
const opens = Temporal.PlainTime.from("09:00");
const closes = Temporal.PlainTime.from("18:00");
const isOpen = (zdt) => {
const t = zdt.toPlainTime();
return Temporal.PlainTime.compare(t, opens) >= 0 &&
Temporal.PlainTime.compare(t, closes) < 0;
};
const now = Temporal.Now.zonedDateTimeISO("Europe/Berlin");
console.log(`Geöffnet: ${isOpen(now)}`);
console.log(isOpen(Temporal.ZonedDateTime.from("2024-05-10T19:15[Europe/Berlin]")));
Uhrzeit auf ein anderes Datum übertragen
const source = Temporal.ZonedDateTime.from(
"2024-01-10T07:45[Europe/Berlin]"
);
const nextWeek = source
.add({ weeks: 1 })
.withPlainTime(source.toPlainTime());
console.log(nextWeek.toString());
// Wichtig · Fallstricke
- Zeitzone und Offset gehen verloren: Ein
PlainTimeist kein eindeutiger Zeitpunkt mehr. ZweiZonedDateTime-Objekte für denselben Moment in verschiedenen Zeitzonen ergeben unterschiedliche Uhrzeiten. Umgekehrt können verschiedene Momente dieselbe Uhrzeit ergeben. - Sommerzeit: Bei der Zeitumstellung im Herbst gibt es Uhrzeiten wie 02:30 zweimal.
toPlainTime()liefert dann in beiden Fällen02:30. Die Information, welcher der beiden Zeitpunkte gemeint war, steckt nur im Offset desZonedDateTimeund fehlt im Ergebnis. - Vergleichsoperatoren: Nutze zum Vergleichen
Temporal.PlainTime.compare()oderequals(), nicht<,>oder===.valueOf()löst bei Temporal-Objekten absichtlich einenTypeErroraus. - Keine Argumente: Die Methode erwartet keine Parameter. Ältere Entwürfe und Polyfills hatten zum Teil andere Varianten. Prüfe bei Beispielen aus älteren Quellen deshalb die aktuelle Spezifikation.
- Kompatibilität: Temporal wird nicht überall nativ unterstützt: in Firefox ab 139, in Chromium-Browsern ab 144, in Safari und älteren Node.js-Versionen noch nicht. Für produktiven Einsatz empfiehlt sich ein Polyfill wie
@js-temporal/polyfillodertemporal-polyfill.