Signatur
Beschreibung
round() rundet eine Uhrzeit ohne Datum und Zeitzone auf eine bestimmte Einheit – etwa auf volle Stunden, Viertelstunden oder ganze Sekunden. Das ursprüngliche Objekt bleibt unverändert, weil alle Temporal-Objekte unveränderlich (immutable) sind. Zurückgegeben wird immer ein neues Temporal.PlainTime.
Die Methode nimmt entweder direkt einen String mit der kleinsten Einheit ("minute") oder ein Optionsobjekt an. Im Optionsobjekt legst du mit smallestUnit die Einheit, mit roundingIncrement die Schrittweite (z. B. 15 Minuten) und mit roundingMode die Rundungsart fest (kaufmännisch, auf- oder abrunden usw.).
Typische Einsatzfälle sind Zeitslots in Buchungssystemen, das Glätten von Messzeitpunkten, Zeiterfassung im 5- oder 15-Minuten-Takt oder das Entfernen von Sub-Sekunden-Anteilen vor der Anzeige. Beachte: Weil PlainTime kein Datum kennt, wird beim Aufrunden über Mitternacht einfach auf 00:00 umgebrochen – der Tageswechsel geht verloren.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $smallestUnit | string | Kurzform: Einheit als String ("hour", "minute", "second", "millisecond", "microsecond", "nanosecond", auch im Plural). Entspricht { smallestUnit }. |
|
| $options | object | Alternativ ein Optionsobjekt. Entweder smallestUnit oder options muss übergeben werden. |
|
| $options.smallestUnit Pflicht | string | Die kleinste Einheit, die erhalten bleibt; alles darunter wird gerundet. Pflicht im Optionsobjekt. | |
| $options.roundingIncrement | number | 1 | Schrittweite in smallestUnit, z. B. 15 bei Minuten. Muss ganzzahlig sein und die nächstgrößere Einheit glatt teilen (bei Stunden: Teiler von 24, bei Minuten/Sekunden: Teiler von 60, bei Milli-/Mikro-/Nanosekunden: Teiler von 1000, aber kleiner als dieser Wert). |
| $options.roundingMode | "ceil" | "floor" | "expand" | "trunc" | "halfCeil" | "halfFloor" | "halfExpand" | "halfTrunc" | "halfEven" | "halfExpand" | Rundungsart. "halfExpand" entspricht dem kaufmännischen Runden; "floor"/"trunc" runden ab, "ceil"/"expand" runden auf. Da Uhrzeiten nie negativ sind, verhalten sich floor/trunc und ceil/expand jeweils gleich. |
Rückgabewert
Temporal.PlainTime-Objekt mit der gerundeten Uhrzeit. Bei Überlauf über Mitternacht wird auf 00:00:00 umgebrochen.Beispiele
Auf volle Stunde oder Minute runden (Kurzform)
const time = Temporal.PlainTime.from("12:38:28.138818731");
console.log(time.round("hour").toString());
console.log(time.round("minute").toString());
console.log(time.round("second").toString());
// Original bleibt unverändert
console.log(time.toString());
Zeiterfassung im Viertelstundentakt
const start = Temporal.PlainTime.from("08:07");
const ende = Temporal.PlainTime.from("16:38");
// Arbeitsbeginn aufrunden, Arbeitsende abrunden
const beginn = start.round({ smallestUnit: "minute", roundingIncrement: 15, roundingMode: "ceil" });
const schluss = ende.round({ smallestUnit: "minute", roundingIncrement: 15, roundingMode: "floor" });
console.log(beginn.toString(), "–", schluss.toString());
console.log(beginn.until(schluss).toString());
Kaufmännisches Runden auf 15 Minuten
const termin = Temporal.PlainTime.from("12:38:28");
const slot = termin.round({ smallestUnit: "minutes", roundingIncrement: 15 });
console.log(slot.toString());
Überlauf über Mitternacht
const spaet = Temporal.PlainTime.from("23:45");
console.log(spaet.round("hour").toString());
// Ungültige Schrittweite wirft RangeError
try {
spaet.round({ smallestUnit: "minute", roundingIncrement: 7 });
} catch (err) {
console.log(err.name);
}
// Wichtig · Fallstricke
- Tageswechsel geht verloren:
23:45auf Stunden gerundet ergibt00:00– ohne Hinweis darauf, dass es der Folgetag ist. Brauchst du den Tag, nutzeTemporal.PlainDateTime.prototype.round(). - Nur Zeiteinheiten erlaubt:
\"day\"oder größere Einheiten werfen einenRangeError, ebenso ein fehlendessmallestUnitim Optionsobjekt. - Schrittweite muss aufgehen:
roundingIncrementmuss die nächstgrößere Einheit glatt teilen (z. B. 1, 2, 3, 4, 5, 6, 10, 12, 15, 20, 30 bei Minuten), sonstRangeError. - Standard-Rundungsart ist
\"halfExpand\"(bei genau der Hälfte wird aufgerundet) – nicht\"halfEven\"wie bei manchen Finanzbibliotheken. - Kompatibilität: Temporal ist neu (Firefox 139+, Chrome/Edge 144+); Safari und ältere Browser benötigen einen Polyfill wie
@js-temporal/polyfillodertemporal-polyfill. Vor Einsatz pertypeof Temporal !== \"undefined\"prüfen.