Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

Date

Baseline
Weitgehend verfügbar
*

Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit Juli 2015 browserübergreifend verfügbar.

* Einige Teile dieser Funktion werden möglicherweise unterschiedlich gut unterstützt.

JavaScript Date-Objekte repräsentieren einen einzelnen Moment in der Zeit in einem plattformunabhängigen Format. Date-Objekte kapseln eine ganze Zahl, die Millisekunden seit Mitternacht zu Beginn des 1. Januar 1970 UTC (der Epoche) darstellt.

Hinweis: Mit der Einführung der Temporal API wird das Date-Objekt als veraltete Funktionalität betrachtet. Ziehen Sie es in Betracht, Temporal für neuen Code zu verwenden und bestehenden Code auf diese neue API zu migrieren, wenn möglich (überprüfen Sie die Browser-Kompatibilität. Wir werden bald einen Leitfaden zur Nutzung schreiben!

Beschreibung

Die Epoche, Zeitstempel und ungültige Daten

Ein JavaScript-Datum wird grundsätzlich als die Zeit in Millisekunden definiert, die seit der Epoche verstrichen ist, die als Mitternacht zu Beginn des 1. Januar 1970 UTC definiert ist (entspricht der UNIX-Epoche). Dieser Zeitstempel ist zeitzonenagnostisch und definiert einen Moment in der Geschichte eindeutig.

Hinweis: Obwohl der Zeitwert im Herzen eines Date-Objekts UTC ist, funktionieren die grundlegenden Methoden, um das Datum und die Uhrzeit oder deren Komponenten abzurufen, alle in der lokalen (d.h. Host-System) Zeitzone und Verschiebung.

Der maximale Zeitstempel, der von einem Date-Objekt darstellbar ist, ist etwas kleiner als die maximale sichere ganze Zahl (Number.MAX_SAFE_INTEGER, also 9.007.199.254.740.991). Ein Date-Objekt kann maximal ±8.640.000.000.000.000 Millisekunden oder ±100.000.000 (einhundert Millionen) Tage relativ zur Epoche darstellen. Dies ist der Bereich vom 20. April 271821 v. Chr. bis zum 13. September 275760 n. Chr. Jeder Versuch, eine Zeit außerhalb dieses Bereichs darzustellen, führt dazu, dass das Date-Objekt einen Zeitstempel von NaN enthält, was ein "ungültiges Datum" ist.

js
console.log(new Date(8.64e15).toString()); // "Sat Sep 13 275760 00:00:00 GMT+0000 (Coordinated Universal Time)"
console.log(new Date(8.64e15 + 1).toString()); // "Invalid Date"

Es gibt verschiedene Methoden, die es Ihnen ermöglichen, mit dem im Datum gespeicherten Zeitstempel zu interagieren:

  • Sie können direkt mit dem Zeitstempelwert unter Verwendung der Methoden getTime() und setTime() interagieren.
  • Die Methoden valueOf() und [Symbol.toPrimitive]() (wenn "number" übergeben wird) — die automatisch bei Zahlenumwandlung aufgerufen werden — geben den Zeitstempel zurück, wodurch sich Date-Objekte wie ihre Zeitstempel verhalten, wenn sie in Zahlkontexten verwendet werden.
  • Alle statischen Methoden (Date.now(), Date.parse(), und Date.UTC()) geben Zeitstempel anstelle von Date-Objekten zurück.
  • Der Date()-Konstruktor kann mit einem Zeitstempel als einzigem Argument aufgerufen werden.

Datumsbestandteile und Zeitzonen

Ein Datum wird intern als eine einzelne Zahl, der Zeitstempel, dargestellt. Beim Umgang damit muss der Zeitstempel als strukturierte Datum-Uhrzeit-Darstellung interpretiert werden. Es gibt immer zwei Möglichkeiten, einen Zeitstempel zu interpretieren: als lokale Zeit oder als Koordinierte Weltzeit (UTC), die globale Standardzeit, die durch den Weltzeitstandard definiert ist. Die lokale Zeitzone wird nicht im Date-Objekt gespeichert, sondern wird durch die Host-Umgebung (das Gerät des Benutzers) bestimmt.

Hinweis: UTC darf nicht mit der Greenwich Mean Time (GMT) verwechselt werden, da sie nicht immer identisch sind – dies wird im verlinkten Wikipedia-Artikel ausführlicher erklärt.

Beispielsweise stellt der Zeitstempel 0 einen einzigartigen Moment in der Geschichte dar, kann aber auf zwei Arten interpretiert werden:

  • Als UTC-Zeit ist es Mitternacht zu Beginn des 1. Januar 1970 UTC,
  • Als lokale Zeit in New York (UTC-5) ist es 19:00:00 am 31. Dezember 1969.

Die Methode getTimezoneOffset() gibt die Differenz zwischen UTC und der lokalen Zeit in Minuten zurück. Beachten Sie, dass die Zeitzonenverschiebung nicht nur von der aktuellen Zeitzone abhängt, sondern auch von der durch das Date-Objekt dargestellten Zeit, aufgrund von Sommerzeitumstellungen und historischen Änderungen. Im Wesentlichen ist die Zeitzonenverschiebung die Verschiebung von der UTC-Zeit zum Zeitpunkt, der durch das Date-Objekt und am Standort der Host-Umgebung repräsentiert wird.

Es gibt zwei Gruppen von Date-Methoden: eine Gruppe erhält und setzt verschiedene Datumsbestandteile, indem der Zeitstempel als lokale Zeit interpretiert wird, während die andere UTC verwendet.

Komponente Lokal UTC
Get Set Get Set
Jahr getFullYear() setFullYear() getUTCFullYear() setUTCFullYear()
Monat getMonth() setMonth() getUTCMonth() setUTCMonth()
Datum (im Monat) getDate() setDate() getUTCDate() setUTCDate()
Stunden getHours() setHours() getUTCHours() setUTCHours()
Minuten getMinutes() setMinutes() getUTCMinutes() setUTCMinutes()
Sekunden getSeconds() setSeconds() getUTCSeconds() setUTCSeconds()
Millisekunden getMilliseconds() setMilliseconds() getUTCMilliseconds() setUTCMilliseconds()
Tag (der Woche) getDay() N/A getUTCDay() N/A

Der Date()-Konstruktor kann mit zwei oder mehr Argumenten aufgerufen werden, wobei diese als Jahr, Monat, Tag, Stunde, Minute, Sekunde und Millisekunde interpretiert werden, jeweils in lokaler Zeit. Date.UTC() funktioniert ähnlich, interpretiert die Komponenten jedoch als UTC-Zeit und akzeptiert auch ein einzelnes Argument, das das Jahr darstellt.

Hinweis: Einige Methoden, einschließlich des Date()-Konstruktors, Date.UTC(), und der veralteten getYear()/setYear()-Methoden, interpretieren ein zweistelliges Jahr als Jahr in den 1900er Jahren. Beispielsweise wird new Date(99, 5, 24) als 24. Juni 1999 interpretiert, nicht als 24. Juni 99. Siehe Interpretation von zweistelligen Jahren für weitere Informationen.

Wenn ein Segment seinen erwarteten Bereich über- oder unterschreitet, "trägt es normalerweise zum höherwertigen Segment über" oder "leiht sich davon". Beispielsweise wird, wenn der Monat auf 12 gesetzt wird (Monate sind nullbasiert, daher ist Dezember 11), daraus der Januar des nächsten Jahres. Wenn auf den 0. Tag des Monats gesetzt wird, wird daraus der letzte Tag des vorherigen Monats. Dies gilt auch für Daten, die mit dem Zeitstempelformat angegeben werden.

Wenn versucht wird, die lokale Zeit auf eine Zeit innerhalb einer Verschiebungstransition (normalerweise Sommerzeit) zu setzen, wird die genaue Zeit unter Verwendung des gleichen Verhaltens wie Temporal's disambiguation: "compatible" Option abgeleitet. Das bedeutet, dass, wenn die lokale Zeit zwei Momenten entspricht, der frühere gewählt wird; wenn die lokale Zeit nicht existiert (es gibt eine Lücke), wird die Lückendauer nach vorne gegangen.

js
// Assume America/New_York local time zone
// 2024-03-10 02:30 is within the spring-forward transition and does not exist
// 01:59 (UTC-5) jumps to 03:00 (UTC-4), so 02:30 moves forward by one hour
console.log(new Date(2024, 2, 10, 2, 30).toString());
// Sun Mar 10 2024 03:30:00 GMT-0400 (Eastern Daylight Time)

// 2024-11-03 01:30 is within the fall-back transition and exists twice
// 01:59 (UTC-4) jumps to 01:00 (UTC-5), so the earlier 01:30 (UTC-4) is chosen
console.log(new Date(2024, 10, 3, 1, 30).toString());
// Sun Nov 03 2024 01:30:00 GMT-0400 (Eastern Daylight Time)

Zeitstempelformat

Es gibt viele Möglichkeiten, ein Datum als Zeichenkette zu formatieren. Die JavaScript-Spezifikation legt nur ein Format fest, das universell unterstützt wird: das Zeitstempelformat, eine Vereinfachung des ISO 8601-Kalenderdatums im erweiterten Format. Das Format ist wie folgt:

YYYY-MM-DDTHH:mm:ss.sssZ
  • YYYY ist das Jahr, mit vier Ziffern (0000 bis 9999) oder als erweitertes Jahr mit + oder -, gefolgt von sechs Ziffern. Das Vorzeichen ist für erweiterte Jahre erforderlich. -000000 ist explizit als gültiges Jahr ausgeschlossen.
  • MM ist der Monat, mit zwei Ziffern (01 bis 12). Standard ist 01.
  • DD ist der Tag des Monats, mit zwei Ziffern (01 bis 31). Standard ist 01.
  • T ist ein literaler Charakter, der den Beginn des Zeit Teils der Zeichenfolge anzeigt. Das T ist erforderlich, wenn der Zeitteil angegeben wird.
  • HH ist die Stunde, mit zwei Ziffern (00 bis 23). Als Sonderfall ist 24:00:00 erlaubt und wird als Mitternacht zu Beginn des nächsten Tages interpretiert. Standard ist 00.
  • mm ist die Minute, mit zwei Ziffern (00 bis 59). Standard ist 00.
  • ss ist die Sekunde, mit zwei Ziffern (00 bis 59). Standard ist 00.
  • sss ist die Millisekunde, mit drei Ziffern (000 bis 999). Standard ist 000.
  • Z ist die Zeitzonenverschiebung, die entweder der buchstäbliche Charakter Z (anzeigend UTC) oder + oder -, gefolgt von HH:mm, der Verschiebung in Stunden und Minuten von UTC, sein kann.

Verschiedene Komponenten können weggelassen werden, also sind die folgenden alle gültig:

  • Nur-Datum-Form: YYYY, YYYY-MM, YYYY-MM-DD
  • Datum-Zeit-Form: eine der oben genannten Nur-Datum-Formen, gefolgt von T, gefolgt von HH:mm, HH:mm:ss oder HH:mm:ss.sss. Jede Kombination kann mit einer Zeitzonenverschiebung folgen.

Beispielsweise sind "2011-10-10" (Nur-Datum Form), "2011-10-10T14:48:00" (Datum-Zeit Form) oder "2011-10-10T14:48:00.000+09:00" (Datum-Zeit Form mit Millisekunden und Zeitzone) alle gültige Datumzeit-Strings.

Wenn die Zeitzonenverschiebung fehlt, werden Nur-Datum-Formen als UTC-Zeit und Datum-Zeit-Formen als lokale Zeit interpretiert. Die Interpretation als UTC-Zeit ist auf einen historischen Spezifikationsfehler zurückzuführen, der nicht mit ISO 8601 übereinstimmte, aber aufgrund von Webkompatibilität nicht geändert werden konnte. Siehe Broken Parser – A Web Reality Issue.

Date.parse() und der Date()-Konstruktor akzeptieren beide Zeichenfolgen im Zeitstempelformat als Eingabe. Darüber hinaus können Implementierungen andere Datumsformate unterstützen, wenn die Eingabe diesem Format nicht entspricht.

Die Methode toISOString() gibt eine Zeichenfolgendarstellung des Datums im Zeitstempelformat zurück, wobei die Zeitzonenverschiebung immer auf Z (UTC) gesetzt ist.

Hinweis: Es wird empfohlen, sicherzustellen, dass Ihre Eingabe dem oben genannten Zeitstempelformat für maximale Kompatibilität entspricht, da die Unterstützung für andere Formate nicht garantiert ist. Es gibt jedoch einige Formate, die in allen großen Implementierungen unterstützt werden — wie das RFC 2822-Format —, in welchem Fall die Verwendung akzeptabel sein kann. Führen Sie immer Cross-Browser-Tests durch, um sicherzustellen, dass Ihr Code in allen Zielbrowsern funktioniert. Eine Bibliothek kann helfen, wenn viele verschiedene Formate unterstützt werden sollen.

Nicht standardisierte Zeichenfolgen können beliebig von der Implementierung geparst werden, einschließlich der Zeitzone — die meisten Implementierungen verwenden standardmäßig die lokale Zeitzone. Implementierungen sind nicht verpflichtet, ungültige Daten für außerhalb der gültigen Bereiche liegende Datumsbestandteile zurückzugeben, obwohl sie dies normalerweise tun. Eine Zeichenfolge kann Datumsbestandteile innerhalb des gültigen Bereichs aufweisen (mit den oben definierten Grenzen), jedoch nicht tatsächlich ein Datum in der Realität darstellen (zum Beispiel "30. Februar"). In solchen Fällen verhalten sich Implementierungen inkonsistent. Die Seite Date.parse() bietet mehr Beispiele zu diesen nicht standardisierten Fällen.

Andere Wege, ein Datum zu formatieren

  • toISOString() gibt eine Zeichenkette im Format 1970-01-01T00:00:00.000Z zurück (das oben eingeführte Zeitstempelformat, das eine vereinfachte ISO 8601 darstellt). toJSON() ruft toISOString() auf und gibt das Ergebnis zurück.
  • toString() gibt eine Zeichenkette im Format Thu Jan 01 1970 00:00:00 GMT+0000 (Coordinated Universal Time) zurück, während toDateString() und toTimeString() die Datum- bzw. Uhrzeit-Teile der Zeichenkette zurückgeben. [Symbol.toPrimitive]() (wenn "string" oder "default" übergeben wird) ruft toString() auf und gibt das Ergebnis zurück.
  • toUTCString() gibt eine Zeichenkette im Format Thu, 01 Jan 1970 00:00:00 GMT zurück (generalisierte RFC 7231).
  • toLocaleDateString(), toLocaleTimeString(), und toLocaleString() verwenden ortsspezifische Datums- und Zeitformate, die normalerweise von der Intl API bereitgestellt werden.

Beispielen siehe den Abschnitt Formate der Rückgabewerte der toString-Methode.

Konstruktor

Date()

Bei Aufruf als Konstruktor wird ein neues Date-Objekt zurückgegeben. Bei Aufruf als Funktion wird eine Zeichenfolgendarstellung des aktuellen Datums und der aktuellen Uhrzeit zurückgegeben.

Statische Methoden

Date.now()

Gibt den numerischen Wert zurück, der der aktuellen Zeit entspricht — die Anzahl der Millisekunden seit dem 1. Januar 1970 00:00:00 UTC, wobei Schaltsekunden ignoriert werden.

Date.parse()

Interpretiert eine Zeichenfolgendarstellung eines Datums und gibt die Anzahl der Millisekunden seit dem 1. Januar 1970 00:00:00 UTC zurück, wobei Schaltsekunden ignoriert werden.

Date.UTC()

Akzeptiert die gleichen Parameter wie die längste Form des Konstruktors (d.h. 2 bis 7) und gibt die Anzahl der Millisekunden seit dem 1. Januar 1970 00:00:00 UTC zurück, wobei Schaltsekunden ignoriert werden.

Instanz-Eigenschaften

Diese Eigenschaften sind auf Date.prototype definiert und werden von allen Date-Instanzen geteilt.

Date.prototype.constructor

Die Konstrukturfunktion, die das Instanzobjekt erstellt hat. Für Date-Instanzen ist der initiale Wert der Date-Konstruktor.

Instanz-Methoden

Date.prototype.getDate()

Gibt den Tag des Monats (131) für das angegebene Datum gemäß lokaler Zeit zurück.

Date.prototype.getDay()

Gibt den Wochentag (06) für das angegebene Datum gemäß lokaler Zeit zurück.

Date.prototype.getFullYear()

Gibt das Jahr (4 Ziffern für 4-stellige Jahre) des angegebenen Datums gemäß lokaler Zeit zurück.

Date.prototype.getHours()

Gibt die Stunde (023) im angegebenen Datum gemäß lokaler Zeit zurück.

Date.prototype.getMilliseconds()

Gibt die Millisekunden (0999) im angegebenen Datum gemäß lokaler Zeit zurück.

Date.prototype.getMinutes()

Gibt die Minuten (059) im angegebenen Datum gemäß lokaler Zeit zurück.

Date.prototype.getMonth()

Gibt den Monat (011) im angegebenen Datum gemäß lokaler Zeit zurück.

Date.prototype.getSeconds()

Gibt die Sekunden (059) im angegebenen Datum gemäß lokaler Zeit zurück.

Date.prototype.getTime()

Gibt den numerischen Wert des angegebenen Datums als Anzahl der Millisekunden seit dem 1. Januar 1970 00:00:00 UTC zurück. (Negative Werte werden für frühere Zeiten zurückgegeben.)

Date.prototype.getTimezoneOffset()

Gibt die Zeitzonenverschiebung in Minuten für die aktuelle Lokalität zurück.

Date.prototype.getUTCDate()

Gibt den Tag (Datum) des Monats (131) im angegebenen Datum gemäß Weltzeit zurück.

Date.prototype.getUTCDay()

Gibt den Wochentag (06) im angegebenen Datum gemäß Weltzeit zurück.

Date.prototype.getUTCFullYear()

Gibt das Jahr (4 Ziffern für 4-stellige Jahre) im angegebenen Datum gemäß Weltzeit zurück.

Date.prototype.getUTCHours()

Gibt die Stunden (023) im angegebenen Datum gemäß Weltzeit zurück.

Date.prototype.getUTCMilliseconds()

Gibt die Millisekunden (0999) im angegebenen Datum gemäß Weltzeit zurück.

Date.prototype.getUTCMinutes()

Gibt die Minuten (059) im angegebenen Datum gemäß Weltzeit zurück.

Date.prototype.getUTCMonth()

Gibt den Monat (011) im angegebenen Datum gemäß Weltzeit zurück.

Date.prototype.getUTCSeconds()

Gibt die Sekunden (059) im angegebenen Datum gemäß Weltzeit zurück.

Date.prototype.getYear()

Gibt das Jahr (normalerweise 2–3 Ziffern) im angegebenen Datum gemäß lokaler Zeit zurück. Verwenden Sie stattdessen getFullYear().

Date.prototype.setDate()

Setzt den Tag des Monats für ein angegebenes Datum gemäß lokaler Zeit.

Date.prototype.setFullYear()

Setzt das ganze Jahr (z. B. 4 Ziffern für 4-stellige Jahre) für ein angegebenes Datum gemäß lokaler Zeit.

Date.prototype.setHours()

Setzt die Stunden für ein angegebenes Datum gemäß lokaler Zeit.

Date.prototype.setMilliseconds()

Setzt die Millisekunden für ein angegebenes Datum gemäß lokaler Zeit.

Date.prototype.setMinutes()

Setzt die Minuten für ein angegebenes Datum gemäß lokaler Zeit.

Date.prototype.setMonth()

Setzt den Monat für ein angegebenes Datum gemäß lokaler Zeit.

Date.prototype.setSeconds()

Setzt die Sekunden für ein angegebenes Datum gemäß lokaler Zeit.

Date.prototype.setTime()