Start · Sprachen · JavaScript · Referenz · Date.prototype.setHours()

Date.prototype.setHours()

Methode

Setzt Stunden sowie optional Minuten, Sekunden und Millisekunden eines <code>Date</code>-Objekts in lokaler Zeit und gibt den neuen Zeitstempel zurück.

seit JavaScript ES1 (Parameter minutes/seconds/ms seit ES3); Basel Kategorie: method-property

Signatur

Date.prototype.setHours(hoursValue, minutesValue, secondsValue, msValue)

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

Typ
number
Beschreibung
Der neue Zeitstempel in Millisekunden seit dem 1. Januar 1970, 00:00:00 UTC (wie 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'));
15.5.2024, 00:00:00 15.5.2024, 23:59:59

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

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'));
1.1.2025, 03:00:00 31.12.2024, 22:00:00

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

// Wichtig · Fallstricke

  • Mutation: setHours() verändert das Objekt selbst. Wird dasselbe Date an mehreren Stellen genutzt, vorher mit new Date(original) kopieren.
  • Rückgabewert ist eine Zahl, kein Date. Verkettungen wie date.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 mit getTime() + 3600000 oder setUTCHours() arbeiten.
  • Zeitzonenabhängigkeit: Auf Servern (Node.js) hängt das Ergebnis von der Umgebungsvariable TZ ab. Für serverseitige Logik ist UTC meist die sicherere Wahl.
  • Nicht-numerische Argumente werden mit Number() umgewandelt; undefined als explizites Argument ergibt NaN und damit ein Invalid Date – optionale Parameter also wirklich weglassen.
  • Nachkommastellen werden abgeschnitten (setHours(1.9) entspricht setHours(1)).
  • Für neue Projekte lohnt ein Blick auf die Temporal-API, die unveränderliche Datums-/Zeitobjekte bietet (Browser-Unterstützung noch im Aufbau).