Die Methode Date.prototype.setHours() setzt die Stunde eines Date-Objekts in der lokalen Zeitzone. Optional lassen sich auch Minuten, Sekunden und Millisekunden in einem einzigen Aufruf festlegen – das macht die Methode zur kompakten Variante, eine komplette Uhrzeit auf einmal zu setzen. Werte außerhalb der gültigen Bereiche werden automatisch in den nächsten oder vorherigen Tag überrollt, was besonders praktisch für Stundenarithmetik ist.
Funktionsweise
setHours() mutiert die Date-Instanz und gibt zusätzlich den neuen Zeitstempel zurück. Werte außerhalb von 0–23 werden ohne Fehler verarbeitet:
setHours(24): Springt auf den nächsten Tag, 0 Uhr.setHours(-1): Geht einen Tag zurück, 23 Uhr.setHours(28): Springt einen Tag vor, 4 Uhr.
Diese Normalisierung erspart manuelle Modulo-Berechnungen und macht die Methode zur ersten Wahl für „in N Stunden”-Berechnungen.
Syntax
date.setHours(hoursValue)
date.setHours(hoursValue, minutesValue)
date.setHours(hoursValue, minutesValue, secondsValue)
date.setHours(hoursValue, minutesValue, secondsValue, msValue)hoursValue Eine Ganzzahl von 0 bis 23, die die neue Stunde angibt.
minutesValue (Optional) Eine Ganzzahl von 0 bis 59.
secondsValue (Optional) Eine Ganzzahl von 0 bis 59.
msValue (Optional) Eine Ganzzahl von 0 bis 999.
Rückgabewert
Die Anzahl der Millisekunden seit dem 1. Januar 1970 UTC nach der Aktualisierung.
Beispiele
Stunde setzen
const date = new Date("2026-05-01T10:00:00");
date.setHours(18);
console.log(date.toLocaleTimeString("de-DE"));18:00:00Komplette Uhrzeit auf einmal setzen
const date = new Date("2026-05-01");
date.setHours(23, 59, 59, 999);
console.log(date.toLocaleString("de-DE"));1.5.2026, 23:59:59Mitternacht-Reset (Anfang des Tages)
Häufiger Anwendungsfall: ein Datum auf den Tagesanfang setzen, etwa für Datumsvergleiche, in denen die Uhrzeit ignoriert werden soll.
function tagesAnfang(date) {
const result = new Date(date);
result.setHours(0, 0, 0, 0);
return result;
}
const date = new Date("2026-05-01T14:30:42");
console.log(tagesAnfang(date).toLocaleString("de-DE"));1.5.2026, 00:00:00Tagesende setzen
function tagesEnde(date) {
const result = new Date(date);
result.setHours(23, 59, 59, 999);
return result;
}
console.log(tagesEnde(new Date("2026-05-01T08:00:00")).toLocaleString("de-DE"));1.5.2026, 23:59:59Stunden addieren mit automatischem Tagesüberlauf
const date = new Date("2026-05-01T20:00:00");
date.setHours(date.getHours() + 8);
console.log(date.toLocaleString("de-DE"));2.5.2026, 04:00:00Hinweise & verwandte Methoden
- Für die UTC-Variante:
Date.prototype.setUTCHours(). - Bei Sommerzeit-Übergängen kann das Setzen einer Stunde unerwartetes Verhalten zeigen – etwa, wenn die gewählte Stunde gar nicht existiert (Übergang in die Sommerzeit) oder doppelt vorkommt (Übergang in die Winterzeit).
- Für reines Setzen der Tagesgrenze ist
setHours(0, 0, 0, 0)das idiomatische Muster und atomar (eine einzige Mutation). - Die Methode mutiert das Original – wer das ursprüngliche Date behalten möchte, muss zuerst klonen.