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

Temporal.PlainTime.prototype.round()

Methode

Gibt ein neues <code>Temporal.PlainTime</code> zurück, das die Uhrzeit auf die angegebene Einheit (z. B. Stunde, Minute) und Schrittweite gerundet darstellt.

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

Signatur

Temporal.PlainTime.prototype.round(smallestUnit | options)

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

Typ
Temporal.PlainTime
Beschreibung
Ein neues 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());
13:00:00 12:38:00 12:38:28 12:38:28.138818731

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());
08:15:00 – 16:30:00 PT8H15M

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());
12:45:00

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

// Wichtig · Fallstricke

  • Tageswechsel geht verloren: 23:45 auf Stunden gerundet ergibt 00:00 – ohne Hinweis darauf, dass es der Folgetag ist. Brauchst du den Tag, nutze Temporal.PlainDateTime.prototype.round().
  • Nur Zeiteinheiten erlaubt: \"day\" oder größere Einheiten werfen einen RangeError, ebenso ein fehlendes smallestUnit im Optionsobjekt.
  • Schrittweite muss aufgehen: roundingIncrement muss die nächstgrößere Einheit glatt teilen (z. B. 1, 2, 3, 4, 5, 6, 10, 12, 15, 20, 30 bei Minuten), sonst RangeError.
  • 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/polyfill oder temporal-polyfill. Vor Einsatz per typeof Temporal !== \"undefined\" prüfen.