Signatur
Beschreibung
Die Methode round() rundet einen Datum-Uhrzeit-Wert ohne Zeitzone auf eine bestimmte Genauigkeit, zum Beispiel auf volle Minuten, Viertelstunden oder ganze Tage. Wie alle Temporal-Objekte ist Temporal.PlainDateTime unveränderlich. Das Original bleibt also erhalten, und du bekommst immer eine neue Instanz zurück.
Du kannst entweder nur die Einheit als String übergeben (dt.round("minute")) oder ein Optionsobjekt mit smallestUnit, roundingIncrement und roundingMode. Damit lassen sich typische Aufgaben lösen: Termine auf ein 15-Minuten-Raster legen, Zeitstempel für die Anzeige kürzen oder Zeitpunkte für Vergleiche und Gruppierungen vereinheitlichen.
Beim Runden kann ein Übertrag entstehen, der alle Einheiten betrifft. 23:59:59.6 am 31. Dezember wird beim Runden auf Sekunden zu 00:00:00 am 1. Januar des Folgejahres. Da PlainDateTime keine Zeitzone kennt, spielen Sommerzeit-Umstellungen keine Rolle. Jeder Tag hat hier genau 24 Stunden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $smallestUnit Pflicht | string | Kurzform: Die Einheit, auf die gerundet wird. Erlaubt sind "day", "hour", "minute", "second", "millisecond", "microsecond" und "nanosecond", jeweils auch in der Mehrzahl (z. B. "minutes"). Es gilt dann roundingMode: "halfExpand" und roundingIncrement: 1. |
|
| $options | object | Alternative zum String: ein Objekt mit den folgenden Eigenschaften. | |
| $options.smallestUnit Pflicht | string | Die Zieleinheit, mit denselben Werten wie oben. Die Angabe ist Pflicht, sonst wird ein RangeError ausgelöst. |
|
| $options.roundingIncrement | number | 1 | Die Schrittweite in smallestUnit, z. B. 15 für ein Viertelstunden-Raster. Der Wert muss die nächstgrößere Einheit ohne Rest teilen: bei Stunden ein Teiler von 24, bei Minuten und Sekunden ein Teiler von 60, bei Milli-, Mikro- und Nanosekunden ein Teiler von 1000. Bei "day" ist nur 1 erlaubt. |
| $options.roundingMode | string | "halfExpand" | Der Rundungsmodus: "ceil", "floor", "expand", "trunc", "halfCeil", "halfFloor", "halfExpand", "halfTrunc" oder "halfEven". Mit dem Standardwert "halfExpand" wird kaufmännisch gerundet: Ab der Hälfte geht es aufwärts. |
Rückgabewert
Temporal.PlainDateTime, gerundet auf die gewünschte Einheit. Alle kleineren Einheiten sind auf 0 gesetzt. Der Kalender des Originals bleibt erhalten.Beispiele
Auf Sekunden und Minuten runden
const dt = Temporal.PlainDateTime.from("2021-07-01T12:34:56.123456789");
console.log(dt.round("second").toString());
console.log(dt.round("minute").toString());
console.log(dt.round("hour").toString());
// Das Original bleibt unverändert
console.log(dt.toString());
Termine auf ein 15-Minuten-Raster legen
const buchungen = [
"2024-03-15T09:52:10",
"2024-03-15T10:07:59",
"2024-03-15T10:14:00"
].map((s) => Temporal.PlainDateTime.from(s));
// Beginn abrunden, Ende aufrunden
const raster = { smallestUnit: "minute", roundingIncrement: 15 };
const start = buchungen[0].round({ ...raster, roundingMode: "floor" });
const ende = buchungen.at(-1).round({ ...raster, roundingMode: "ceil" });
console.log(`Slot: ${start.toString()} bis ${ende.toString()}`);
Übertrag über Tages- und Jahresgrenze
const silvester = Temporal.PlainDateTime.from("2024-12-31T23:59:59.6");
console.log(silvester.round("second").toString());
// Auf ganze Tage: ab 12:00 Uhr wird aufgerundet
const mittag = Temporal.PlainDateTime.from("2024-03-15T13:00");
console.log(mittag.round("day").toString());
console.log(mittag.round({ smallestUnit: "day", roundingMode: "trunc" }).toString());
Ungültige Optionen abfangen
const dt = Temporal.PlainDateTime.from("2024-05-01T08:20");
try {
// 7 teilt 60 nicht ohne Rest
dt.round({ smallestUnit: "minute", roundingIncrement: 7 });
} catch (err) {
console.log(err instanceof RangeError);
}