Start · Sprachen · JavaScript · Referenz · Temporal.ZonedDateTime.prototype.withPlainTime()

Temporal.ZonedDateTime.prototype.withPlainTime()

Methode

Gibt ein neues <code>Temporal.ZonedDateTime</code> zurück, dessen Uhrzeit vollständig durch die angegebene Zeit ersetzt wird. Datum und Zeitzone bleiben gleich.

seit JavaScript ES2026 (Temporal) – Firefox 139+, Chrome 144+; Saf Kategorie: method-property

Signatur

Temporal.ZonedDateTime.prototype.withPlainTime(plainTime)

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

Typ
Temporal.ZonedDateTime
Beschreibung
Ein neues 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());
2024-03-15T09:00:00+01:00[Europe/Berlin] 2024-03-15T09:30:45.123+01:00[Europe/Berlin]

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());
2024-03-15T00:00:00+01:00[Europe/Berlin] 2024-03-15T18:30:00+01:00[Europe/Berlin] 2024-03-15T17:00:00+01:00[Europe/Berlin]

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());
2024-03-31T03:30:00+02:00[Europe/Berlin]

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);
[ "2024-10-25T18:30:00+02:00[Europe/Berlin]", "2024-10-26T18:30:00+02:00[Europe/Berlin]", "2024-10-27T18:30:00+01:00[Europe/Berlin]" ]