Signatur
Beschreibung
Mit new Date() erzeugen Sie ein Date-Objekt. Intern speichert jedes Date-Objekt nur eine Zahl, nämlich die Millisekunden seit dem 1. Januar 1970, 00:00:00 UTC (Zeitstempel). Zeitzone und Formatierung kommen erst bei der Ausgabe ins Spiel, z. B. über toLocaleString() oder toISOString().
Je nach Anzahl und Typ der Argumente verhält sich der Konstruktor unterschiedlich:
- Keine Argumente: aktuelles Datum und aktuelle Uhrzeit.
- Eine Zahl: wird als Zeitstempel in Millisekunden seit der Epoche verstanden.
- Ein String: wird geparst, zuverlässig allerdings nur im ISO-8601-Format (z. B.
"2024-05-17T14:30:00Z"). - Ein
Date-Objekt: erzeugt eine Kopie mit demselben Zeitpunkt. - Zwei oder mehr Zahlen: einzelne Komponenten (Jahr, Monat, Tag …) in der lokalen Zeitzone.
Rufen Sie Date() ohne new auf, bekommen Sie kein Objekt zurück, sondern nur einen String mit dem aktuellen Datum. Alle Argumente werden dabei ignoriert. Brauchen Sie nur den aktuellen Zeitstempel als Zahl, ist Date.now() effizienter.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $value | number | string | Date | aktueller Zeitpunkt | Bei nur einem Argument: ein Zeitstempel in Millisekunden seit der Epoche, ein Datumsstring (am besten ISO 8601) oder ein bestehendes Date-Objekt, das kopiert wird. |
| $year | number | Jahr als ganze Zahl. Werte von 0 bis 99 werden als 1900–1999 gedeutet. |
|
| $monthIndex | number | Monat, nullbasiert: 0 = Januar, 11 = Dezember. Nötig, sobald mehrere Komponenten übergeben werden. |
|
| $day | number | 1 | Tag im Monat (1–31). |
| $hours | number | 0 | Stunde (0–23). |
| $minutes | number | 0 | Minuten (0–59). |
| $seconds | number | 0 | Sekunden (0–59). |
| $milliseconds | number | 0 | Millisekunden (0–999). |
Rückgabewert
Date-Objekt. Ist die Eingabe ungültig, ist das Objekt ein Invalid Date: getTime() liefert dann NaN.Beispiele
Aktuelles Datum, Zeitstempel und ISO-String
const jetzt = new Date();
console.log(jetzt.toISOString());
const epoche = new Date(0);
console.log(epoche.toISOString());
const ausIso = new Date('2024-05-17T14:30:00Z');
console.log(ausIso.getTime());
Datum aus Komponenten (Monat ist nullbasiert!)
// 24. Dezember 2024, 18:00 Uhr lokale Zeit
const heiligabend = new Date(2024, 11, 24, 18, 0);
console.log(heiligabend.toLocaleString('de-DE'));
// Überlauf wird automatisch korrigiert: 32. Januar → 1. Februar
const ueberlauf = new Date(2024, 0, 32);
console.log(ueberlauf.toLocaleDateString('de-DE'));
Datum kopieren und Tage addieren
const addiereTage = (datum, tage) => {
const kopie = new Date(datum); // Original bleibt unverändert
kopie.setDate(kopie.getDate() + tage);
return kopie;
};
const rechnung = new Date(2024, 0, 15);
const faellig = addiereTage(rechnung, 30);
console.log(rechnung.toLocaleDateString('de-DE'));
console.log(faellig.toLocaleDateString('de-DE'));
Ungültige Eingaben erkennen
const istGueltig = (d) => d instanceof Date && !Number.isNaN(d.getTime());
console.log(istGueltig(new Date('2024-02-10')));
console.log(istGueltig(new Date('kein Datum')));
console.log(String(new Date('kein Datum')));
// Wichtig · Fallstricke
- Monate sind nullbasiert:
new Date(2024, 1, 1)ist der 1. Februar. Tage beginnen dagegen bei 1. - Zeitzonen beim Parsen: Ein reiner Datums-String wie
"2024-05-17"wird als UTC interpretiert,"2024-05-17T00:00"ohneZdagegen als lokale Zeit. Das kann zu Verschiebungen um einen Tag führen. - Nicht-ISO-Strings wie
"17.05.2024"oder"May 17, 2024"werden je nach Engine unterschiedlich oder gar nicht geparst. Parsen Sie solche Formate lieber selbst und übergeben Sie die einzelnen Komponenten. - Keine Ausnahme bei Fehlern: Ungültige Eingaben werfen keinen Fehler, sondern ergeben ein Invalid Date. Prüfen Sie das mit
Number.isNaN(d.getTime()).toISOString()wirft in diesem Fall einenRangeError. - Zweistellige Jahre: Bei der Komponenten-Variante wird aus
new Date(24, 0)das Jahr 1924. Für die Jahre 0–99 verwenden SiesetFullYear(). - Wertebereich: ±8,64·1015 ms um die Epoche (etwa ±273.790 Jahre). Werte außerhalb ergeben ein Invalid Date.
Date-Objekte sind veränderbar. Arbeiten Sie mit Kopien (new Date(d)), wenn Sie Werte weitergeben. Für neuen Code lohnt sich ein Blick auf die kommendeTemporal-API.