Start · Sprachen · JavaScript · Referenz · new Date()

new Date()

Methode

Der <code>Date()</code>-Konstruktor erzeugt ein neues <code>Date</code>-Objekt, das einen einzelnen Zeitpunkt als Millisekunden seit der Unix-Epoche (1.1.1970 UTC) speichert.

seit JavaScript ES1 (Baseline: alle Browser) Kategorie: method-property

Signatur

new Date(value?) | new Date(dateString) | new Date(year, monthIndex, day?, hours?, minutes?, seconds?, milliseconds?)

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

Typ
Date
Beschreibung
Ein neues 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());
2024-05-17T12:00:00.000Z (je nach aktuellem Zeitpunkt) 1970-01-01T00:00:00.000Z 1715956200000

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'));
24.12.2024, 18:00:00 1.2.2024

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'));
15.1.2024 14.2.2024

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

// 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" ohne Z dagegen 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 einen RangeError.
  • Zweistellige Jahre: Bei der Komponenten-Variante wird aus new Date(24, 0) das Jahr 1924. Für die Jahre 0–99 verwenden Sie setFullYear().
  • 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 kommende Temporal-API.