Signatur
Beschreibung
setHours() verändert das Date-Objekt direkt (mutierend) und setzt dabei die Stunde und optional Minuten, Sekunden und Millisekunden bezogen auf die lokale Zeitzone der Laufzeitumgebung. Werden die optionalen Argumente weggelassen, bleiben die entsprechenden Anteile unverändert, d. h. die Werte von getMinutes(), getSeconds() und getMilliseconds() werden weiterverwendet.
Typische Einsatzfälle sind das Normalisieren eines Datums auf den Tagesbeginn (setHours(0, 0, 0, 0)) oder das Tagesende (setHours(23, 59, 59, 999)), das Festlegen einer Uhrzeit für Termine sowie das Addieren oder Subtrahieren von Stunden.
Liegen Werte außerhalb ihres üblichen Bereichs, werden sie übergelaufen verrechnet: setHours(25) springt auf 1 Uhr des Folgetages, setHours(-1) auf 23 Uhr des Vortages, setMinutes-Anteile von 90 ergeben eine zusätzliche Stunde usw. Dadurch lässt sich bequem mit Stunden rechnen, ohne Tages- oder Monatsgrenzen manuell zu behandeln.
Für die UTC-basierte Variante ohne Zeitzonen- und Sommerzeit-Einflüsse verwendet man setUTCHours().
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $hoursValue Pflicht | number | Stunde, üblicherweise 0–23. Andere Werte werden auf benachbarte Tage übergelaufen. |
|
| $minutesValue | number | getMinutes() | Minuten, üblicherweise 0–59. Wird er weggelassen, bleibt der aktuelle Minutenwert erhalten. |
| $secondsValue | number | getSeconds() | Sekunden, üblicherweise 0–59. Nur zusammen mit minutesValue angebbar. |
| $msValue | number | getMilliseconds() | Millisekunden, üblicherweise 0–999. Nur zusammen mit minutesValue und secondsValue angebbar. |
Rückgabewert
getTime()). Ist ein Argument NaN oder das Datum bereits ungültig, wird NaN zurückgegeben und das Datum wird zu einem Invalid Date.Beispiele
Datum auf Tagesbeginn und Tagesende normalisieren
const start = new Date(2024, 4, 15, 14, 37, 12, 345);
const end = new Date(start);
start.setHours(0, 0, 0, 0);
end.setHours(23, 59, 59, 999);
console.log(start.toLocaleString('de-DE'));
console.log(end.toLocaleString('de-DE'));
Nur die Stunde ändern – Minuten bleiben erhalten
const termin = new Date(2024, 0, 10, 9, 45);
const ts = termin.setHours(16);
console.log(termin.toLocaleTimeString('de-DE'));
console.log(ts === termin.getTime());
Stunden addieren mit automatischem Tagesüberlauf
// Immutable-Hilfsfunktion: Original bleibt unverändert
const addHours = (date, hours) => {
const d = new Date(date);
d.setHours(d.getHours() + hours);
return d;
};
const abflug = new Date(2024, 11, 31, 22, 0);
const ankunft = addHours(abflug, 5);
console.log(ankunft.toLocaleString('de-DE'));
console.log(abflug.toLocaleString('de-DE'));
Prüfen, ob zwei Zeitpunkte am selben Kalendertag liegen
const sameDay = (a, b) =>
new Date(a).setHours(0, 0, 0, 0) === new Date(b).setHours(0, 0, 0, 0);
console.log(sameDay(new Date(2024, 2, 5, 8), new Date(2024, 2, 5, 23)));
console.log(sameDay(new Date(2024, 2, 5, 8), new Date(2024, 2, 6, 1)));
// Wichtig · Fallstricke
- Mutation:
setHours()verändert das Objekt selbst. Wird dasselbeDatean mehreren Stellen genutzt, vorher mitnew Date(original)kopieren. - Rückgabewert ist eine Zahl, kein
Date. Verkettungen wiedate.setHours(0).toISOString()schlagen fehl. - Sommerzeit: Weil in lokaler Zeit gerechnet wird, können Stunden in der Umstellungsnacht nicht existieren (z. B. 2:30 Uhr in Deutschland Ende März) oder doppelt vorkommen. Die Engine verschiebt solche Werte, sodass
getHours()danach einen anderen Wert liefern kann. Für exakte Stundenarithmetik besser mitgetTime()+3600000odersetUTCHours()arbeiten. - Zeitzonenabhängigkeit: Auf Servern (Node.js) hängt das Ergebnis von der Umgebungsvariable
TZab. Für serverseitige Logik ist UTC meist die sicherere Wahl. - Nicht-numerische Argumente werden mit
Number()umgewandelt;undefinedals explizites Argument ergibtNaNund damit ein Invalid Date – optionale Parameter also wirklich weglassen. - Nachkommastellen werden abgeschnitten (
setHours(1.9)entsprichtsetHours(1)). - Für neue Projekte lohnt ein Blick auf die
Temporal-API, die unveränderliche Datums-/Zeitobjekte bietet (Browser-Unterstützung noch im Aufbau).