Signatur
Beschreibung
withPlainTime() ersetzt den gesamten Zeitanteil (Stunde bis Nanosekunde) eines Temporal.ZonedDateTime. Kalenderdatum, Zeitzone und Kalender bleiben erhalten. Wie alle Temporal-Objekte ist ZonedDateTime unveränderlich: Die Methode gibt immer eine neue Instanz zurück, das Original bleibt gleich.
Typische Einsatzfälle sind Aufgaben wie „gleicher Tag, aber um 9:00 Uhr“, „Beginn eines Arbeitstags“ oder „Terminserie immer um 18:30 Ortszeit“. Anders als bei with({ hour: 9 }) bleiben hier keine Minuten, Sekunden oder Bruchteile der alten Uhrzeit übrig. Alle Felder, die in der neuen Zeit fehlen, werden auf 0 gesetzt.
Ohne Argument wird der Tagesbeginn in der jeweiligen Zeitzone verwendet. Das ist meist 00:00 Uhr. Gibt es Mitternacht wegen einer Sommerzeitumstellung nicht, nimmt die Methode den ersten gültigen Zeitpunkt des Tages, genau wie startOfDay().
Die Umrechnung in einen genauen Zeitpunkt nutzt immer die Auflösungsstrategie "compatible". Eine Uhrzeit, die durch eine Zeitumstellung ausfällt, wird nach vorn verschoben. Bei einer doppelt vorkommenden Uhrzeit wird der frühere Zeitpunkt gewählt. Einen Parameter options gibt es nicht.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $plainTime | Temporal.PlainTime | string | { hour?, minute?, second?, millisecond?, microsecond?, nanosecond? } | undefined | undefined (Tagesbeginn in der Zeitzone) | Die neue Uhrzeit. Möglich sind eine Temporal.PlainTime-Instanz, ein ISO-8601-Zeitstring wie "09:30" oder ein Objekt mit Zeitfeldern (fehlende Felder werden 0). Wird nichts übergeben, wird der Tagesbeginn verwendet. |
Rückgabewert
Temporal.ZonedDateTime mit demselben Datum, derselben Zeitzone und demselben Kalender, aber mit der neuen Uhrzeit. Der UTC-Versatz wird für den neuen Zeitpunkt neu berechnet.Beispiele
Uhrzeit auf 9:00 Uhr setzen
const zdt = Temporal.ZonedDateTime.from("2024-03-15T14:30:45.123[Europe/Berlin]");
// Die ganze Uhrzeit wird ersetzt, also auch Sekunden und Millisekunden
const morgens = zdt.withPlainTime("09:00");
console.log(morgens.toString());
// Zum Vergleich: with() übernimmt die übrigen Felder der alten Uhrzeit
console.log(zdt.with({ hour: 9 }).toString());
Tagesbeginn ohne Argument und mit Objekt-Syntax
const zdt = Temporal.ZonedDateTime.from("2024-03-15T14:30[Europe/Berlin]");
// Ohne Argument: Tagesbeginn in der Zeitzone
console.log(zdt.withPlainTime().toString());
// Objekt: fehlende Felder werden 0
console.log(zdt.withPlainTime({ hour: 18, minute: 30 }).toString());
// Mit einer PlainTime-Instanz
const feierabend = new Temporal.PlainTime(17, 0);
console.log(zdt.withPlainTime(feierabend).toString());
Wegfallende Uhrzeit bei Beginn der Sommerzeit
// Am 31.03.2024 springt die Uhr in Berlin von 02:00 auf 03:00
const tag = Temporal.ZonedDateTime.from("2024-03-31T12:00[Europe/Berlin]");
// 02:30 gibt es an diesem Tag nicht, die Zeit wird nach vorn verschoben ("compatible")
const termin = tag.withPlainTime("02:30");
console.log(termin.toString());
Wiederkehrender Termin zur gleichen Ortszeit
const start = Temporal.ZonedDateTime.from("2024-10-25T08:15[Europe/Berlin]");
const meetingZeit = Temporal.PlainTime.from("18:30");
// Die nächsten 3 Tage, immer um 18:30 Ortszeit, auch über die Zeitumstellung hinweg
const termine = Array.from({ length: 3 }, (_, i) =>
start.add({ days: i }).withPlainTime(meetingZeit).toString()
);
console.log(termine);