Datums- und Zeitformate in HTML
Bestimmte HTML-Elemente verwenden Datums- und/oder Zeitwerte. Die Formate der Zeichenfolgen, die diese Werte spezifizieren, werden in diesem Artikel beschrieben.
Elemente, die solche Formate verwenden, umfassen bestimmte Formen des <input>
-Elements, das es dem Benutzer ermöglicht, ein Datum, eine Zeit oder beides auszuwählen oder anzugeben, sowie die <ins>
und <del>
-Elemente, deren datetime
-Attribut das Datum oder das Datum und die Uhrzeit angibt, zu der die Einfügung oder Löschung von Inhalten erfolgt ist.
Für <input>
sind die type
-Werte von Eingaben, deren value
eine Zeichenfolge darstellt, die ein Datum und/oder eine Zeit repräsentiert:
Beispiele
Bevor wir auf die Feinheiten eingehen, wie Datums- und Zeitzeichenfolgen in HTML geschrieben und geparst werden, finden Sie hier einige Beispiele, die Ihnen eine gute Vorstellung davon geben sollten, wie die häufig verwendeten Datums- und Zeitzeichenfolgen aussehen.
Zeichenkette | Datum und/oder Zeit | |
---|---|---|
2005-06-07 |
7. Juni 2005 | [Einzelheiten] |
08:45 |
8:45 Uhr | [Einzelheiten] |
08:45:25 |
8:45 Uhr und 25 Sekunden | [Einzelheiten] |
0033-08-04T03:40 |
3:40 Uhr am 4. August, Jahr 33 | [Einzelheiten] |
1977-04-01T14:00:30 |
30 Sekunden nach 14:00 Uhr am 1. April 1977 | [Einzelheiten] |
1901-01-01T00:00Z |
Mitternacht UTC am 1. Januar 1901 | [Einzelheiten] |
1901-01-01T00:00:01-04:00 |
1 Sekunde nach Mitternacht Eastern Standard Time (EST) am 1. Januar 1901 | [Einzelheiten] |
Grundlagen
Bevor wir uns die verschiedenen Formate von daten- und zeitbezogenen Zeichenfolgen ansehen, die von HTML-Elementen verwendet werden, ist es hilfreich, einige grundlegende Fakten über die Art und Weise, wie sie definiert sind, zu verstehen. HTML verwendet eine Variation des ISO 8601-Standards für seine Datums- und Zeitzeichenfolgen. Es lohnt sich, die Beschreibungen der Formate, die Sie verwenden, zu überprüfen, um sicherzustellen, dass Ihre Zeichenfolgen tatsächlich mit HTML kompatibel sind, da die HTML-Spezifikation Algorithmen zum Parsen dieser Zeichenfolgen enthält, die tatsächlich präziser als ISO 8601 sind, sodass es subtile Unterschiede in der erwarteten Darstellung von Datums- und Zeitzeichenfolgen geben kann.
Zeichensatz
Daten und Zeiten in HTML sind immer Zeichenfolgen, die den ASCII-Zeichensatz verwenden.
Jahreszahlen
Um das Basisformat für Datumszeichenfolgen in HTML zu vereinfachen, verlangt die Spezifikation, dass alle Jahre nach dem modernen (oder proleptischen) gregorianischen Kalender angegeben werden. Obwohl Benutzeroberflächen die Eingabe von Daten unter Verwendung anderer Kalender zulassen können, verwendet der zugrunde liegende Wert immer den gregorianischen Kalender.
Obwohl der gregorianische Kalender erst im Jahr 1582 erstellt wurde (als Ersatz für den ähnlichen julianischen Kalender), wird er für HTML-Zwecke bis zum Jahr 1 n. Chr. zurückdatiert. Stellen Sie sicher, dass alle älteren Daten dies berücksichtigen.
Für HTML-Daten bestehen Jahreszahlen immer aus mindestens vier Ziffern; Jahre vor dem Jahr 1000 werden mit führenden Nullen (0
) aufgefüllt, sodass das Jahr 72 als 0072
geschrieben wird. Jahre vor dem Jahr 1 n. Chr. werden nicht unterstützt, daher unterstützt HTML keine Jahre 1 v. Chr. oder früher.
Ein Jahr ist normalerweise 365 Tage lang, außer in Schaltjahren.
Schaltjahre
Ein Schaltjahr ist jedes Jahr, das durch 400 teilbar ist oder das Jahr ist durch 4 teilbar, aber nicht durch 100. Obwohl das Kalenderjahr normalerweise 365 Tage lang ist, dauert es tatsächlich etwa 365,2422 Tage, bis der Planet Erde eine einzige Umlaufbahn um die Sonne vollendet. Schaltjahre helfen dabei, den Kalender so anzupassen, dass er mit der tatsächlichen Position des Planeten in seiner Umlaufbahn synchronisiert bleibt. Das Hinzufügen eines Tages zum Jahr alle vier Jahre macht das Durchschnittsjahr im Wesentlichen 365,25 Tage lang, was nahe an der korrekten Länge liegt.
Die Anpassungen des Algorithmus (ein Schaltjahr zu nehmen, wenn das Jahr durch 400 teilbar ist, und Schaltjahre zu überspringen, wenn das Jahr durch 100 teilbar ist) helfen, den Durchschnitt noch näher an die korrekte Anzahl von Tagen (365,2425 Tage) heranzuführen. Wissenschaftler fügen manchmal Schaltsekunden zum Kalender hinzu (ernsthaft), um die verbleibenden drei Zehntausendstel eines Tages zu berücksichtigen und um die allmähliche, natürlich auftretende Verlangsamung der Erdrotation auszugleichen.
Während Monat 02
, Februar, normalerweise 28 Tage hat, hat er in Schaltjahren 29 Tage.
Monate des Jahres
Es gibt 12 Monate im Jahr, nummeriert von 1 bis 12. Sie werden immer durch eine zweistellige ASCII-Zeichenfolge dargestellt, deren Wert von 01
bis 12
reicht. Siehe die Tabelle im Abschnitt Tage des Monats für die Monatsnummern und ihre entsprechenden Namen (und Längen in Tagen).
Tage des Monats
Monatsnummern 1, 3, 5, 7, 8, 10 und 12 sind 31 Tage lang. Monate 4, 6, 9 und 11 sind 30 Tage lang. Monat 2, Februar, ist in den meisten Jahren 28 Tage lang, in Schaltjahren jedoch 29 Tage lang. Dies wird in der folgenden Tabelle detailliert beschrieben.
Monatsnummer | Name (Englisch) | Länge in Tagen |
---|---|---|
01 | January | 31 |
02 | February | 28 (29 in Schaltjahren) |
03 | March | 31 |
04 | April | 30 |
05 | May | 31 |
06 | June | 30 |
07 | July | 31 |
08 | August | 31 |
09 | September | 30 |
10 | October | 31 |
11 | November | 30 |
12 | December | 31 |
Wochenzeichenfolgen
Eine Wochenzeichenfolge gibt eine Woche innerhalb eines bestimmten Jahres an. Eine gültige Wochenzeichenfolge besteht aus einer gültigen Jahreszahl, gefolgt von einem Bindestrich-Zeichen (-
, oder U+002D), dann dem Großbuchstaben W
(U+0057), gefolgt von einer zweistelligen Wochenzahl des Jahreswerts.
Die Woche des Jahres ist eine zweistellige Zeichenfolge zwischen 01
und 53
. Jede Woche beginnt am Montag und endet am Sonntag. Das bedeutet, dass die ersten Tage des Januars möglicherweise als Teil der vorherigen Kalenderwoche betrachtet werden und die letzten Tage des Dezembers als Teil der folgenden Kalenderwoche. Die erste Woche des Jahres ist die Woche, die den ersten Donnerstag des Jahres enthält. Zum Beispiel war der erste Donnerstag des Jahres 1953 am 1. Januar, sodass diese Woche—beginnend am Montag, den 29. Dezember—als die erste Woche des Jahres gilt. Daher fällt der 30. Dezember 1952 in die Woche 1953-W01
.
Ein Jahr hat 53 Wochen, wenn:
- Der erste Tag des Kalenderjahres (1. Januar) ein Donnerstag ist oder
- Der erste Tag des Jahres (1. Januar) ein Mittwoch ist und das Jahr ein Schaltjahr ist
Alle anderen Jahre haben 52 Wochen.
Wochenzeichenfolge | Woche und Jahr (Datumsbereich) |
---|---|
2001-W37 |
Woche 37, 2001 (10.-16. September, 2001) |
1953-W01 |
Woche 1, 1953 (29. Dezember, 1952–4. Januar, 1953) |
1948-W53 |
Woche 53, 1948 (27. Dezember, 1948–2. Januar, 1949) |
1949-W01 |
Woche 1, 1949 (3.–9. Januar, 1949) |
0531-W16 |
Woche 16, 531 (13.–19. April, 531) |
0042-W04 |
Woche 4, 42 (21.–27. Januar, 42) |
Beachten Sie, dass sowohl die Jahres- als auch die Wochenzahlen mit führenden Nullen aufgefüllt sind, wobei die Jahreszahl auf vier Ziffern und die Woche auf zwei Ziffern aufgefüllt ist.
Monatszeichenfolgen
Eine Monatszeichenfolge repräsentiert einen bestimmten Monat in der Zeit, anstatt eines generischen Monats des Jahres. Statt "January" steht eine HTML-Monatszeichenfolge für einen Monat und ein Jahr kombiniert, wie "January 1972".
Eine gültige Monatszeichenfolge besteht aus einer gültigen Jahreszahl (eine Zeichenkette aus mindestens vier Ziffern), gefolgt von einem Bindestrich-Zeichen (-
, oder U+002D), gefolgt von einer zweistelligen numerischen Monatszahl, wobei 01
für Januar und 12
für Dezember steht.
Monatszeichenfolge | Monat und Jahr |
---|---|
17310-09 |
September, 17310 |
2019-01 |
Januar, 2019 |
1993-11 |
November, 1993 |
0571-04 |
April, 571 |
0001-07 |
Juli, 1 n. Chr. |
Beachten Sie, dass alle Jahre mindestens vier Zeichen lang sind; Jahre, die weniger als vier Ziffern lang sind, werden mit führenden Nullen aufgefüllt.
Datumszeichenfolgen
Eine gültige Datumszeichenfolge besteht aus einer Monatszeichenfolge, gefolgt von einem Bindestrich-Zeichen (-
, oder U+002D), gefolgt von einem zweistelligen Tag des Monats.
Datumszeichenfolge | Volles Datum |
---|---|
1993-11-01 |
1. November 1993 |
1066-10-14 |
14. Oktober 1066 |
0571-04-22 |
22. April 571 |
0062-02-05 |
5. Februar 62 |
Zeitzeichenfolgen
Eine Zeitzeichenfolge kann eine Zeit mit Genauigkeit auf die Minute, Sekunde oder Millisekunde angeben. Es ist nicht erlaubt, nur die Stunde oder Minute anzugeben. Eine gültige Zeitzeichenfolge besteht mindestens aus einer zweistelligen Stunde, gefolgt von einem Doppelpunkt (:
, U+003A), dann einer zweistelligen Minute. Optional kann nach der Minute ein weiterer Doppelpunkt und eine zweistellige Anzahl von Sekunden folgen. Millisekunden können optional angegeben werden, indem ein Dezimalpunkt-Zeichen (.
, U+002E) hinzugefügt wird, gefolgt von einer, zwei oder drei Ziffern.
Es gibt einige zusätzliche grundlegende Regeln:
- Die Stunde wird immer im 24-Stunden-Format angegeben, wobei
00
Mitternacht und 23 Uhr23
ist. Es sind keine Werte außerhalb des Bereichs00
–23
erlaubt. - Die Minute muss eine zweistellige Zahl zwischen
00
und59
sein. Werte außerhalb dieses Bereichs sind nicht erlaubt. - Wenn die Anzahl der Sekunden weggelassen wird (um eine Zeit anzugeben, die nur auf die Minute genau ist), sollte kein Doppelpunkt nach der Anzahl der Minuten folgen.
- Wenn die Anzahl der Sekunden angegeben wird und ganzzahlig ist, darf sie nicht von einem Dezimalpunkt gefolgt werden.
- Wenn ein Bruchteil einer Sekunde angegeben wird, kann er zwischen ein und drei Ziffern lang sein und gibt die Anzahl der Millisekunden an. Er folgt dem Dezimalpunkt, der nach der Sekundenkomponente der Zeitzeichenfolge platziert wird.
Zeitzeichenfolge | Zeit |
---|---|
00:00:30.75 |
12:00:30,75 Uhr (30,75 Sekunden nach Mitternacht) |
12:15 |
12:15 Uhr |
13:44:25 |
13:44:25 Uhr (25 Sekunden nach 13:44 Uhr) |
Lokale Datums- und Zeitzeichenfolgen
Eine gültige datetime-local
-Zeichenfolge besteht aus einer date
-Zeichenfolge und einer time
-Zeichenfolge, die mit entweder dem Buchstaben T
oder einem Leerzeichen verbunden sind. Keine Informationen über die Zeitzone sind in der Zeichenfolge enthalten; das Datum und die Zeit werden als in der lokalen Zeitzone des Benutzers angenommen.
Wenn Sie den value
eines datetime-local
-Inputs setzen, wird die Zeichenfolge normalisiert in eine Standardform. Normalisierte datetime
-Zeichenfolgen verwenden immer den Buchstaben T
, um das Datum und die Zeit zu trennen, und der Zeitanteil der Zeichenfolge ist so kurz wie möglich. Dies wird erreicht, indem die Sekundeneinheit weggelassen wird, wenn ihr Wert :00
ist.
Datum/Zeit-Zeichenfolge | Normalisierte Datum/Zeit-Zeichenfolge | Tatsächliches Datum und Zeit |
---|---|---|
1986-01-28T11:38:00.01 |
1986-01-28T11:38:00.01 |
28. Januar 1986 um 11:38:00,01 Uhr |
1986-01-28 11:38:00.010 |
Beachten Sie, dass nach der Normalisierung diese die gleiche Zeichenfolge
wie die vorherige |
28. Januar 1986 um 11:38:00,01 Uhr |
0170-07-31T22:00:00 |
Beachten Sie, dass die normalisierte Form dieses Datums die
|
31. Juli 170 um 22:00 Uhr |
Globale Datums- und Zeitzeichenfolgen
Eine globale Datums- und Zeitzeichenfolge spezifiziert ein Datum und eine Uhrzeit sowie die Zeitzone, in der diese auftreten. Eine gültige globale Datums- und Zeitzeichenfolge hat dasselbe Format wie eine lokale Datums- und Zeitzeichenfolge, weist jedoch am Ende eine Zeitzonenzeichenfolge auf, die die Zeit ergänzt.
Zeichenfolge der Zeitzonenverschiebung
Eine Zeichenfolge der Zeitzonenverschiebung spezifiziert die Verschiebung in entweder einer positiven oder einer negativen Anzahl von Stunden und Minuten von der Standardzeitbasis. Es gibt zwei Standardzeitbasen, die sehr nah beieinander liegen, aber nicht genau gleich sind:
- Für Daten nach der Einrichtung von Coordinated Universal Time (UTC) in den frühen 1960ern ist die Zeitbasis
Z
und der Offset zeigt die Verschiebung einer bestimmten Zeitzone von der Zeit auf dem Nullmeridian von 0º Länge (der durch das Royal Observatory in Greenwich, England, verläuft) an. - Für Daten vor UTC wird die Zeitbasis stattdessen in Bezug auf UT1 ausgedrückt, was die zeitgenössische Erdsolartime am Nullmeridian ist.
Die Zeitzonenzeichenfolge wird unmittelbar nach der Zeit in der Datums- und Zeitzeichenfolge angehängt. Sie können Z
als Zeitzonen-Offsets-Zeichenfolge angeben, um anzugeben, dass die Zeit in UTC angegeben ist. Ansonsten wird die Zeitzonenzeichenfolge wie folgt konstruiert:
- Ein Zeichen, das das Vorzeichen des Offsets anzeigt: das Pluszeichen (
+
, oder U+002B) für Zeitzonen östlich des Nullmeridians oder das Minuszeichen (-
, oder U+002D) für Zeitzonen westlich des Nullmeridians. - Eine zweistellige Anzahl von Stunden, die die Zeitzone vom Nullmeridian versetzt ist. Dieser Wert muss zwischen
00
und23
liegen. - Ein optionaler Doppelpunkt (
:
) Charakter. - Eine zweistellige Anzahl von Minuten nach der Stunde; dieser Wert muss zwischen
00
und59
liegen.
Obwohl dieses Format Zeitzonen zwischen -23:59 und +23:59 erlaubt, liegt der aktuelle Bereich von Zeitzonenoffsets zwischen -12:00 und +14:00, und keine Zeitzonen sind derzeit von der Stunde mehr als 00
, 30
oder 45
Minuten versetzt. Dies kann sich jederzeit ändern, da Länder ihre Zeitzonen jederzeit und auf jede mögliche Weise ändern können.
Globale Datums- und Zeitzeichenfolge | Tatsächliches globales Datum und Zeit | Datum und Zeit am Nullmeridian |
---|---|---|
2005-06-07T00:00Z |
7. Juni 2005 um Mitternacht UTC | 7. Juni 2005 um Mitternacht |
1789-08-22T12:30:00.1-04:00 |
22. August 1789 eine Zehntelsekunde nach 12:30 Uhr Eastern Daylight Time (EDT) | 22. August 1789 eine Zehntelsekunde nach 16:30 Uhr |
3755-01-01 00:00+10:00 |
1. Januar 3755 um Mitternacht Australian Eastern Standard Time (AEST) | 31. Dezember 3754 um 14:00 Uhr |
Datumsprobleme
Aufgrund von Datenaufbewahrungs- und Genauigkeitsfragen möchten Sie sich möglicherweise einiger clientseitiger und serverseitiger Themen bewusst sein.
Das Y2K38-Problem (oft serverseitig)
JavaScript verwendet Gleitkommazahlen mit doppelter Genauigkeit, um Daten zu speichern, ebenso wie alle Zahlen, was bedeutet, dass JavaScript-Code nicht unter dem Y2K38-Problem leiden wird, es sei denn, Ganzzahlauslosung und Bit-Tricks werden verwendet, weil alle JavaScript-Bit-Operatoren 32-Bit-Zweierkomplement-Ganzzahlen verwenden.
Das Problem liegt auf der Serverseite: Speicherung von Daten größer als 2^31 - 1. Um dieses Problem zu beheben, müssen Sie alle Daten entweder mit unsigned 32-Bit-Ganzzahlen, signed 64-Bit-Ganzzahlen oder Gleitkommazahlen mit doppelter Genauigkeit auf dem Server speichern. Wenn Ihr Server in PHP geschrieben ist, kann die Korrektur so einfach sein wie ein Upgrade auf PHP 8 oder 7 und ein Upgrade Ihrer Hardware auf x86_64 oder IA64. Wenn Sie mit anderer Hardware festsitzen, können Sie versuchen, 64-Bit-Hardware innerhalb einer 32-Bit-virtuellen Maschine zu emulieren, aber die meisten VMs unterstützen diese Art der Virtualisierung nicht, da die Stabilität leiden könnte und die Leistung definitiv erheblich leiden wird.
Das Y10k-Problem (oft clientseitig)
Auf vielen Servern werden Daten als Zahlen anstelle von Zeichenfolgen gespeichert—Zahlen mit einer festen Größe und agnostisch gegenüber dem Format (abgesehen von der Endianness). Nach dem Jahr 10.000 werden diese Zahlen einfach etwas größer sein als vorher, sodass viele Server keine Probleme mit Formularen sehen werden, die nach dem Jahr 10.000 eingesendet werden.
Das Problem liegt auf der Clientseite: Parsing von Daten mit mehr als 4 Ziffern im Jahr.
<!--midnight of January 1st, 10000: the exact time of Y10K-->
<input type="datetime-local" value="+010000-01-01T05:00" />
Es ist so einfach. Bereiten Sie Ihren Code einfach auf eine beliebige Anzahl von Ziffern vor. Bereiten Sie sich nicht nur auf 5 Ziffern vor. Hier ist JavaScript-Code zum programmatischen Setzen des Werts:
function setValue(element, date) {
const isoString = date.toISOString();
element.value = isoString.substring(0, isoString.indexOf("T") + 6);
}
Warum sich um das Y10k-Problem kümmern, wenn es Jahrhunderte nach Ihrem Tod passieren wird? Genau deshalb, weil Sie bereits tot sein werden, sind die Unternehmen, die Ihre Software nutzen, gezwungen, Ihre Software zu nutzen, ohne dass ein anderer Programmierer das System gut genug kennt, um hereinzukommen und es zu reparieren.
Siehe auch
<input>
<ins>
und<del>
: siehe dasdatetime
-Attribut, das entweder ein Datum oder einen lokalen Zeitpunkt angibt, zu dem der Inhalt eingefügt oder gelöscht wurde- Die ISO 8601 Spezifikation
- Zahlen und Daten im JavaScript Leitfaden
- Das JavaScript
Date
-Objekt - Das
Intl.DateTimeFormat
-Objekt für die Formatierung von Daten und Zeiten für einen bestimmten Ort