Start · Sprachen · JavaScript · Referenz · Temporal.PlainTime.prototype.with()

Temporal.PlainTime.prototype.with()

Methode

Gibt ein neues <code>Temporal.PlainTime</code> zurück, bei dem einzelne Zeitfelder (z. B. <code>hour</code>, <code>minute</code>) durch neue Werte ersetzt sind.

seit JavaScript Temporal (TC39, Stage 3) – Firefox 139+, Chrome/Ed Kategorie: method-property

Signatur

Temporal.PlainTime.prototype.with(info, options)

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

Typ
Temporal.PlainTime
Beschreibung
Ein neues 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
20:34:56 12:34:56

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());
09:00:00 09:47:13

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);
}
10:59:00 RangeError

Ö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)`);
08:15:00 – 18:00:00 (9 h 45 min)

// Wichtig · Fallstricke

  • Kein Überlauf: with({ minute: 75 }) ergibt nicht 11:15, sondern (bei overflow: "constrain") 10:59. Für Zeitrechnung add()/subtract() verwenden.
  • TypeError, wenn info keine einzige bekannte Zeiteigenschaft enthält (z. B. {} oder { hours: 5 } – Plural ist falsch!), wenn calendar oder timeZone angegeben wird oder wenn statt eines Objekts ein String übergeben wird. Zum Parsen von Strings Temporal.PlainTime.from() nutzen.
  • Nicht ganzzahlige Werte werden abgeschnitten; Infinity oder NaN führen zu einem RangeError.
  • Schaltsekunden gibt es nicht: second: 60 wird 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/polyfill oder temporal-polyfill.