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

Temporal.PlainDateTime.prototype.round()

Methode

Gibt ein neues <code>Temporal.PlainDateTime</code> zurück, das auf die angegebene Zeiteinheit (Tag bis Nanosekunde) gerundet ist, optional mit Schrittweite und Rundungsmodus.

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

Signatur

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

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

Typ
Temporal.PlainDateTime
Beschreibung
Ein neues 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());
2021-07-01T12:34:56 2021-07-01T12:35:00 2021-07-01T13:00:00 2021-07-01T12:34:56.123456789

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()}`);
Slot: 2024-03-15T09:45:00 bis 2024-03-15T10:15:00

Ü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());
2025-01-01T00:00:00 2024-03-16T00:00:00 2024-03-15T00:00:00

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);
}
true