Signatur
Beschreibung
with() erzeugt eine Kopie einer Uhrzeit, in der nur die angegebenen Felder geändert sind. Alle übrigen Felder bleiben erhalten. Da Temporal.PlainTime unveränderlich (immutable) ist, wird das Originalobjekt nie verändert – das Ergebnis muss also immer einer Variablen zugewiesen werden.
Setzbare Felder sind hour, minute, second, millisecond, microsecond und nanosecond. Typische Anwendungsfälle: eine Uhrzeit auf die volle Stunde setzen ({ minute: 0, second: 0 }), Sekundenbruchteile entfernen oder einen festen Zeitpunkt wie „Ladenschluss 18:00“ aus einer vorhandenen Zeit ableiten.
with() ersetzt Felder, es rechnet nicht. Wer eine Dauer hinzuzählen möchte (z. B. „90 Minuten später“), verwendet add(); zum Runden eignet sich round(). Werte außerhalb des gültigen Bereichs werden standardmäßig auf den nächstgelegenen gültigen Wert begrenzt, statt in die nächste Einheit überzulaufen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $info Pflicht | Object | Objekt mit mindestens einer der Eigenschaften hour (0–23), minute (0–59), second (0–59), millisecond, microsecond, nanosecond (je 0–999). Nicht angegebene oder undefined-Felder bleiben unverändert. Eigenschaften calendar oder timeZone sind nicht erlaubt. |
|
| $options | Object | {} | Optionen-Objekt mit der Eigenschaft overflow: "constrain" (Standard) begrenzt ungültige Werte auf den gültigen Bereich, "reject" wirft stattdessen einen RangeError. |
Rückgabewert
Temporal.PlainTime-Objekt mit den ersetzten Feldern. Das ursprüngliche Objekt bleibt unverändert.Beispiele
Einzelne Felder ersetzen
const zeit = Temporal.PlainTime.from("12:34:56");
const abends = zeit.with({ hour: 20 });
console.log(abends.toString());
console.log(zeit.toString()); // Original bleibt unverändert
Auf volle Stunde setzen und Sekundenbruchteile entfernen
const jetzt = Temporal.PlainTime.from("09:47:13.582");
const volleStunde = jetzt.with({ minute: 0, second: 0, millisecond: 0 });
const ohneBruchteile = jetzt.with({ millisecond: 0 });
console.log(volleStunde.toString());
console.log(ohneBruchteile.toString());
Verhalten bei ungültigen Werten: constrain vs. reject
const zeit = Temporal.PlainTime.from("10:30");
// Standard: Wert wird begrenzt, kein Überlauf in die nächste Stunde
console.log(zeit.with({ minute: 75 }).toString());
try {
zeit.with({ minute: 75 }, { overflow: "reject" });
} catch (err) {
console.log(err.constructor.name);
}
Öffnungszeiten aus Benutzereingabe ableiten
const oeffnung = Temporal.PlainTime.from("08:15");
// Formular liefert nur die Stunde für den Ladenschluss
const eingabe = { hour: Number("18") };
const schluss = oeffnung.with({ ...eingabe, minute: 0 });
const offen = oeffnung.until(schluss);
console.log(`${oeffnung} – ${schluss} (${offen.hours} h ${offen.minutes} min)`);
// Wichtig · Fallstricke
- Kein Überlauf:
with({ minute: 75 })ergibt nicht 11:15, sondern (beioverflow: "constrain") 10:59. Für Zeitrechnungadd()/subtract()verwenden. - TypeError, wenn
infokeine einzige bekannte Zeiteigenschaft enthält (z. B.{}oder{ hours: 5 }– Plural ist falsch!), wenncalendarodertimeZoneangegeben wird oder wenn statt eines Objekts ein String übergeben wird. Zum Parsen von StringsTemporal.PlainTime.from()nutzen. - Nicht ganzzahlige Werte werden abgeschnitten;
InfinityoderNaNführen zu einemRangeError. - Schaltsekunden gibt es nicht:
second: 60wird zu 59 begrenzt (bzw. mit"reject"abgelehnt). - Kompatibilität: Temporal ist erst in neueren Browsern verfügbar (Firefox 139+, Chromium 144+); Safari und ältere Umgebungen benötigen einen Polyfill wie
@js-temporal/polyfillodertemporal-polyfill.