Datum ist in JavaScript seltsam. Es nervt uns so sehr, dass wir Bibliotheken (wie Date-fns und Moment) sofort (ha!) greifen, wenn wir mit Datum und Uhrzeit arbeiten müssen.
Aber wir müssen nicht immer Bibliotheken verwenden. Datum kann tatsächlich recht einfach sein, wenn man weiß, worauf man achten muss. In diesem Artikel führe ich Sie durch alles, was Sie über das Date-Objekt wissen müssen.
Zuerst lassen Sie uns die Existenz von Zeitzonen anerkennen.
Zeitzonen
Es gibt Hunderte von Zeitzonen auf unserer Welt. In JavaScript interessieren uns nur zwei - Lokale Zeit und Koordinierte Weltzeit (UTC).
- Lokale Zeit bezieht sich auf die Zeitzone, in der sich Ihr Computer befindet.
- UTC ist praktisch gleichbedeutend mit der Greenwich Mean Time (GMT).
Standardmäßig liefert fast jede Datums-Methode in JavaScript (außer einer) ein Datum/eine Uhrzeit in lokaler Zeit. Sie erhalten nur UTC, wenn Sie UTC angeben.
Damit können wir über die Erstellung von Datumsangaben sprechen.
Datum erstellen
Sie können ein Datum mit new Date() erstellen. Es gibt vier mögliche Wege, new Date() zu verwenden.
- Mit einem Datumsstring
- Mit Datumsargumenten
- Mit einem Zeitstempel
- Ohne Argumente
Die Datumsstring-Methode
Bei der Datumsstring-Methode erstellen Sie ein Datum, indem Sie einen Datumsstring an new Date übergeben.
new Date('1988-03-21')
Wir neigen zur Datumsstring-Methode, wenn wir Datumsangaben schreiben. Das ist natürlich, weil wir schon unser ganzes Leben lang Datumsstrings verwenden.
Wenn ich 21-03-1988 schreibe, deduzieren Sie ohne Probleme, dass es der 21. März 1988 ist. Ja? Aber wenn Sie 21-03-1988 in JavaScript schreiben, erhalten Sie Invalid Date.

new Date('21-03-1988') gibt ungültiges Datum zurück.Dafür gibt es einen guten Grund.
Wir interpretieren Datumsstrings in verschiedenen Teilen der Welt unterschiedlich. Zum Beispiel ist 11-06-2019 entweder der 11. Juni 2019 oder der 6. November 2019. Aber Sie können nicht sicher sein, was ich meine, es sei denn, Sie kennen das Datumssystem, das ich verwende.
In JavaScript müssen Sie, wenn Sie einen Datumsstring verwenden möchten, ein Format verwenden, das weltweit akzeptiert wird. Eines dieser Formate ist das ISO 8601 Extended Format.
// ISO 8601 Extended format
`YYYY-MM-DDTHH:mm:ss.sssZ`
Hier bedeuten die Werte
YYYY: 4-stellige JahreszahlMM: 2-stelliger Monat (wobei Januar 01 und Dezember 12 ist)DD: 2-stelliger Tag (0 bis 31)-: Trennzeichen für das DatumT: Zeigt den Beginn der Zeit anHH: 24-stellige Stunde (0 bis 23)mm: Minuten (0 bis 59)ss: Sekunden (0 bis 59)sss: Millisekunden (0 bis 999):: Trennzeichen für die ZeitZ: WennZvorhanden ist, wird das Datum auf UTC gesetzt. WennZnicht vorhanden ist, wird es lokale Zeit sein. (Dies gilt nur, wenn eine Zeit angegeben ist.)
Stunden, Minuten, Sekunden und Millisekunden sind optional, wenn Sie ein Datum erstellen. Wenn Sie also ein Datum für den erstellen möchten, können Sie dies schreiben.
new Date('2019-06-11')
Achten Sie hier besonders auf. Es gibt ein großes Problem bei der Erstellung von Daten mit Datumsstrings. Sie können das Problem erkennen, wenn Sie dieses Datum console.log.
Wenn Sie in einer Region leben, die hinter GMT liegt, erhalten Sie ein Datum, das 10. Juni anzeigt.

new Date('2019-06-11') ergibt den 10. Juni, wenn Sie sich in einem Gebiet hinter GMT befinden.Wenn Sie in einer Region leben, die vor GMT liegt, erhalten Sie ein Datum, das 11. Juni anzeigt.

new Date('2019-06-11') ergibt den 11. Juni, wenn Sie sich in einem Gebiet nach GMT befinden.Das liegt daran, dass die Datumsstring-Methode ein besonderes Verhalten aufweist: Wenn Sie ein Datum erstellen (ohne Angabe der Uhrzeit), erhalten Sie ein Datum, das in UTC gesetzt ist.
Im obigen Szenario erstellen Sie, wenn Sie new Date('2019-06-11') schreiben, tatsächlich ein Datum, das 11. Juni 2019, 12 Uhr UTC anzeigt. Deshalb erhalten Personen, die in Gebieten hinter der GMT leben, einen 10. Juni anstelle eines 11. Juni.
Wenn Sie ein Datum in lokaler Zeit mit der Datumsstring-Methode erstellen möchten, müssen Sie die Uhrzeit angeben. Wenn Sie die Uhrzeit angeben, müssen Sie mindestens die HH und mm schreiben (andernfalls gibt Google Chrome ein ungültiges Datum zurück).
new Date('2019-06-11T00:00')

Die ganze Angelegenheit mit lokaler Zeit vs. UTC bei Datumsstrings kann eine mögliche Fehlerquelle sein, die schwer zu fassen ist. Daher empfehle ich Ihnen, keine Daten mit Datumsstrings zu erstellen.
(Übrigens warnt MDN vor dem Datumsstring-Ansatz, da Browser Datumsstrings unterschiedlich interpretieren können).

Wenn Sie Daten erstellen möchten, verwenden Sie Argumente oder Zeitstempel.
Datumserstellung mit Argumenten
Sie können bis zu sieben Argumente übergeben, um ein Datum/eine Uhrzeit zu erstellen.
- Jahr: 4-stellige Jahreszahl.
- Monat: Monat des Jahres (0-11). Der Monat ist nullindiziert. Standardwert ist 0, wenn weggelassen.
- Tag: Tag des Monats (1-31). Standardwert ist 1, wenn weggelassen.
- Stunde: Stunde des Tages (0-23). Standardwert ist 0, wenn weggelassen.
- Minuten: Minuten (0-59). Standardwert ist 0, wenn weggelassen.
- Sekunden: Sekunden (0-59). Standardwert ist 0, wenn weggelassen.
- Millisekunden: Millisekunden (0-999). Standardwert ist 0, wenn weggelassen.
// 11th June 2019, 5:23:59am, Local Time
new Date(2019, 5, 11, 5, 23, 59)
Viele Entwickler (mich eingeschlossen) vermeiden den Argumentenansatz, weil er kompliziert aussieht. Aber er ist eigentlich ziemlich einfach.
Versuchen Sie, Zahlen von links nach rechts zu lesen. Wenn Sie von links nach rechts gehen, fügen Sie Werte in absteigender Reihenfolge ein: Jahr, Monat, Tag, Stunden, Minuten, Sekunden und Millisekunden.
new Date(2017, 3, 22, 5, 23, 50)
// This date can be easily read if you follow the left-right formula.
// Year: 2017,
// Month: April (because month is zero-indexed)
// Date: 22
// Hours: 05
// Minutes: 23
// Seconds: 50
Der problematischste Teil bei Datum ist, dass der Monats-Wert nullindiziert ist, d.h. Januar === 0, Februar === 1, März === 2 und so weiter.
Es ist etwas seltsam, dass JavaScript nullindiziert ist (anscheinend, weil so hat es Java gemacht), aber anstatt darüber zu streiten, warum der Januar 1 (und nicht 0) sein sollte, ist es besser zu akzeptieren, dass der Monat in JavaScript nullindiziert ist. Sobald Sie diese Tatsache akzeptieren, werden Daten viel einfacher zu handhaben sein.
Hier sind weitere Beispiele, um sich damit vertraut zu machen.
// 21st March 1988, 12am, Local Time.
new Date(1988, 2, 21)
// 25th December 2019, 8am, Local Time.
new Date(2019, 11, 25, 8)
// 6th November 2023, 2:20am, Local Time
new Date(2023, 10, 6, 2, 20)
// 11th June 2019, 5:23:59am, Local Time
new Date(2019, 5, 11, 5, 23, 59)
Beachten Sie, dass die mit Argumenten erstellten Daten alle in lokaler Zeit liegen?
Das ist einer der Vorteile der Verwendung von Argumenten - Sie werden nicht zwischen lokaler Zeit und UTC verwirrt. Wenn Sie jemals UTC benötigen, erstellen Sie ein Datum in UTC auf diese Weise.
// 11th June 2019, 12am, UTC.
new Date(Date.UTC(2019, 5, 11))
Datumserstellung mit Zeitstempeln
In JavaScript ist ein Zeitstempel die Anzahl der Millisekunden, die seit dem 1. Januar 1970 vergangen sind (1. Januar 1970 ist auch als Unix-Epoche bekannt). Aus meiner Erfahrung verwendet man Zeitstempel selten, um Daten zu erstellen. Man verwendet Zeitstempel nur zum Vergleichen verschiedener Daten (mehr dazu später).
// 11th June 2019, 8am (in my Local Time, Singapore)
new Date(1560211200000)
Ohne Argumente
Wenn Sie ein Datum ohne Argumente erstellen, erhalten Sie ein Datum, das auf die aktuelle Uhrzeit gesetzt ist (in lokaler Zeit).
new Date()

Sie können auf dem Bild erkennen, dass es in Singapur war, als ich diesen Artikel schrieb.
Zusammenfassung zur Datumserstellung
- Sie können ein Datum mit
new Date()erstellen. - Es gibt vier mögliche Syntaxen
- Mit einem Datumsstring
- Mit Argumenten
- Mit Zeitstempel
- Ohne Argumente
- Erstellen Sie niemals ein Datum mit der Datumsstring-Methode.
- Am besten erstellen Sie Daten mit der Argumentenmethode.
- Denken Sie daran (und akzeptieren Sie), dass Monate in JavaScript nullindiziert sind.
Als nächstes sprechen wir über die Konvertierung eines Datums in einen lesbaren String.
Formatierung eines Datums
Die meisten Programmiersprachen bieten Ihnen ein Formatierungswerkzeug, um jedes gewünschte Datumsformat zu erstellen. Zum Beispiel können Sie in PHP date("d M Y") schreiben, um ein Datum wie 23 Jan 2019 zu erhalten.
Aber es gibt keine einfache Möglichkeit, ein Datum in JavaScript zu formatieren.
Das native Date-Objekt verfügt über sieben Formatierungsmethoden. Jede dieser sieben Methoden liefert Ihnen einen bestimmten Wert (und sie sind ziemlich nutzlos).
const date = new Date(2019, 0, 23, 17, 23, 42)
toStringgibt IhnenWed Jan 23 2019 17:23:42 GMT+0800 (Singapore Standard Time).toDateStringgibt IhnenWed Jan 23 2019.toLocaleStringgibt Ihnen23.01.2019, 17:23:42.toLocaleDateStringgibt Ihnen23.01.2019.toGMTStringgibt IhnenWed, 23 Jan 2019 09:23:42 GMT.toUTCStringgibt IhnenWed, 23 Jan 2019 09:23:42 GMT.toISOStringgibt Ihnen2019-01-23T09:23:42.079Z.
Wenn Sie ein benutzerdefiniertes Format benötigen, müssen Sie es selbst erstellen.
Schreiben eines benutzerdefinierten Datumsformats
Nehmen wir an, Sie möchten etwas wie Do, 23. Januar 2019. Um diesen Wert zu erstellen, müssen Sie die Datumsmethoden kennen (und verwenden), die mit dem Date-Objekt geliefert werden.
Um Datumsangaben zu erhalten, können Sie diese vier Methoden verwenden.
getFullYear: Gibt die 4-stellige Jahreszahl gemäß der lokalen Zeit zurück.getMonth: Gibt den Monat des Jahres (0-11) gemäß der lokalen Zeit zurück. Der Monat ist nullindiziert.getDate: Gibt den Tag des Monats (1-31) gemäß der lokalen Zeit zurück.getDay: Gibt den Wochentag (0-6) gemäß der lokalen Zeit zurück. Der Wochentag beginnt mit Sonntag (0) und endet mit Samstag (6).
Es ist einfach, 23 und 2019 für Do, 23. Januar 2019 zu erstellen. Wir können getFullYear und getDate verwenden, um sie zu erhalten.
const d = new Date(2019, 0, 23)
const year = d.getFullYear() // 2019
const date = d.getDate() // 23
Es ist schwieriger, Do und Januar zu erhalten.
Um Januar zu erhalten, müssen Sie ein Objekt erstellen, das den Wert aller zwölf Monate ihren entsprechenden Namen zuordnet.
const months = {
0: 'January',
1: 'February',
2: 'March',
3: 'April',
4: 'May',
5: 'June',
6: 'July',
7: 'August',
8: 'September',
9: 'October',
10: 'November',
11: 'December'
}
Da der Monat nullindiziert ist, können wir stattdessen ein Array verwenden. Es liefert die gleichen Ergebnisse.
const months = [
'January',
'February',
'March',
'April',
'May',
'June',
'July',
'August',
'September',
'October',
'November',
'December'
]
Um Januar zu erhalten, müssen Sie
- Verwenden Sie
getMonth, um den nullindizierten Monat aus dem Datum zu erhalten. - Holen Sie sich den Monatsnamen aus
months.
const monthIndex = d.getMonth()
const monthName = months[monthIndex]
console.log(monthName) // January
Die komprimierte Version.
const monthName = months[d.getMonth()]
console.log(monthName) // January
Das Gleiche tun Sie, um Do zu erhalten. Diesmal benötigen Sie ein Array, das die sieben Tage der Woche enthält.
const days = [
'Sun',
'Mon',
'Tue',
'Wed',
'Thu',
'Fri',
'Sat'
]
Dann tun Sie
- Holen Sie sich
dayIndexmitgetDay. - Verwenden Sie
dayIndex, umdayNamezu erhalten.
const dayIndex = d.getDay()
const dayName = days[dayIndex] // Thu
Kurzversion.
const dayName = days[d.getDay()] // Thu
Dann kombinieren Sie alle Variablen, die Sie erstellt haben, um den formatierten String zu erhalten.
const formatted = `${dayName}, ${date} ${monthName} ${year}`
console.log(formatted) // Thu, 23 January 2019
Ja, es ist mühsam. Aber es ist nicht unmöglich, wenn man den Dreh erst einmal raus hat.
Wenn Sie jemals ein benutzerdefiniert formatiertes Datum erstellen müssen, können Sie die folgenden Methoden verwenden.
getHours: Gibt Stunden (0-23) gemäß der lokalen Zeit zurück.getMinutes: Gibt Minuten (0-59) gemäß der lokalen Zeit zurück.getSeconds: Gibt Sekunden (0-59) gemäß der lokalen Zeit zurück.getMilliseconds: Gibt Millisekunden (0-999) gemäß der lokalen Zeit zurück.
Als nächstes sprechen wir über den Vergleich von Daten.
Daten vergleichen
Wenn Sie wissen möchten, ob ein Datum vor oder nach einem anderen Datum liegt, können Sie sie direkt mit >, <, >= und <= vergleichen.
const earlier = new Date(2019, 0, 26)
const later = new Date(2019, 0, 27)
console.log(earlier < later) // true
Es ist schwieriger, wenn Sie prüfen möchten, ob zwei Daten genau zur gleichen Zeit liegen. Sie können sie nicht mit == oder === vergleichen.
const a = new Date(2019, 0, 26)
const b = new Date(2019, 0, 26)
console.log(a == b) // false
console.log(a === b) // false
Um zu prüfen, ob zwei Daten genau zur gleichen Zeit liegen, können Sie ihre Zeitstempel mit getTime prüfen.
const isSameTime = (a, b) => {
return a.getTime() === b.getTime()
}
const a = new Date(2019, 0, 26)
const b = new Date(2019, 0, 26)
console.log(isSameTime(a, b)) // true
Wenn Sie prüfen möchten, ob zwei Daten am selben Tag liegen, können Sie ihre getFullYear, getMonth und getDate Werte prüfen.
const isSameDay = (a, b) => {
return a.getFullYear() === b.getFullYear() &&
a.getMonth() === b.getMonth() &&
a.getDate()=== b.getDate()
}
const a = new Date(2019, 0, 26, 10) // 26 Jan 2019, 10am
const b = new Date(2019, 0, 26, 12) // 26 Jan 2019, 12pm
console.log(isSameDay(a, b)) // true
Es gibt noch eine letzte Sache, die wir behandeln müssen.
Ein Datum aus einem anderen Datum erhalten
Es gibt zwei mögliche Szenarien, in denen Sie ein Datum aus einem anderen Datum erhalten möchten.
- Einen bestimmten Datums-/Uhrzeitwert aus einem anderen Datum setzen.
- Eine Differenz zu einem anderen Datum addieren/subtrahieren.
Einen bestimmten Datums-/Uhrzeitwert setzen
Sie können diese Methoden verwenden, um ein Datum/eine Uhrzeit aus einem anderen Datum zu setzen.
setFullYear: Setzt das 4-stellige Jahr in lokaler Zeit.setMonth: Setzt den Monat des Jahres in lokaler Zeit.setDate: Setzt den Tag des Monats in lokaler Zeit.setHours: Setzt die Stunden in lokaler Zeit.setMinutes: Setzt die Minuten in lokaler Zeit.setSeconds: Setzt die Sekunden in lokaler Zeit.setMilliseconds: Setzt die Millisekunden in lokaler Zeit.
Wenn Sie zum Beispiel ein Datum auf den 15. des Monats setzen möchten, können Sie setDate(15) verwenden.
const d = new Date(2019, 0, 10)
d.setDate(15)
console.log(d) // 15 January 2019
Wenn Sie den Monat auf Juni setzen möchten, können Sie setMonth verwenden. (Denken Sie daran, dass der Monat in JavaScript nullindiziert ist!)
const d = new Date(2019, 0, 10)
d.setMonth(5)
console.log(d) // 10 June 2019
Hinweis: Die oben genannten Setter-Methoden ändern das ursprüngliche Datumsobjekt. In der Praxis sollten wir Objekte nicht verändern (mehr dazu hier). Wir sollten diese Operationen stattdessen auf einem neuen Datumsobjekt durchführen.
const d = new Date(2019, 0, 10)
const newDate = new Date(d)
newDate.setMonth(5)
console.log(d) // 10 January 2019
console.log(newDate) // 10 June 2019
Delta zu einem anderen Datum addieren/subtrahieren
Eine Differenz ist eine Änderung. Indem ich eine Differenz zu einem anderen Datum addiere/subtrahiere, meine ich Folgendes: Sie möchten ein Datum erhalten, das X von einem anderen Datum entfernt ist. Das kann X Jahre, X Monate, X Tage usw. sein.
Um eine Differenz zu erhalten, müssen Sie den aktuellen Wert des Datums kennen. Sie können ihn mit diesen Methoden abrufen.
getFullYear: Gibt die 4-stellige Jahreszahl gemäß der lokalen Zeit zurück.getMonth: Gibt den Monat des Jahres (0-11) gemäß der lokalen Zeit zurück.getDate: Gibt den Tag des Monats (1-31) gemäß der lokalen Zeit zurück.getHours: Gibt Stunden (0-23) gemäß der lokalen Zeit zurück.getMinutes: Gibt Minuten (0-59) gemäß der lokalen Zeit zurück.getSeconds: Gibt Sekunden (0-59) gemäß der lokalen Zeit zurück.getMilliseconds: Gibt Millisekunden (0-999) gemäß der lokalen Zeit zurück.
Es gibt zwei allgemeine Ansätze, um eine Differenz zu addieren/subtrahieren. Der erste Ansatz ist auf Stack Overflow beliebter. Er ist prägnant, aber schwerer zu verstehen. Der zweite Ansatz ist ausführlicher, aber leichter zu verstehen.
Lassen Sie uns beide Ansätze durchgehen.
Sagen wir, Sie möchten ein Datum erhalten, das drei Tage von heute entfernt ist. Für dieses Beispiel nehmen wir auch an, dass heute der ist. (Es ist einfacher zu erklären, wenn wir mit einem festen Datum arbeiten).
Der erste Ansatz (der Set-Ansatz)
// Assumes today is 28 March 2019
const today = new Date(2019, 2, 28)
Zuerst erstellen wir ein neues Date-Objekt (damit wir das ursprüngliche Datum nicht verändern).
const finalDate = new Date(today)
Als Nächstes müssen wir den Wert kennen, den wir ändern möchten. Da wir Tage ändern, können wir den Tag mit getDate abrufen.
const currentDate = today.getDate()
Wir möchten ein Datum, das drei Tage von heute entfernt ist. Wir addieren die Differenz (3) zum aktuellen Datum.
finalDate.setDate(currentDate + 3)
Vollständiger Code für den Set-Ansatz.
const today = new Date(2019, 2, 28)
const finalDate = new Date(today)
finalDate.setDate(today.getDate() + 3)
console.log(finalDate) // 31 March 2019
Der zweite Ansatz (der New-Date-Ansatz)
Hier verwenden wir getFullYear, getMonth, getDate und andere Getter-Methoden, bis wir die Art des Wertes erreichen, den wir ändern möchten. Dann erstellen wir das endgültige Datum mit new Date.
const today = new Date(2019, 2, 28)
// Getting required values
const year = today.getFullYear()
const month = today.getMonth()
const day = today.getDate()
// Creating a new Date (with the delta)
const finalDate = new Date(year, month, day + 3)
console.log(finalDate) // 31 March 2019
Beide Ansätze funktionieren. Wählen Sie einen und bleiben Sie dabei.
Automatische Datumskorrektur
Wenn Sie dem Datum einen Wert außerhalb seines akzeptablen Bereichs übergeben, berechnet JavaScript das Datum automatisch für Sie neu.
Hier ist ein Beispiel. Nehmen wir an, wir setzen das Datum auf den . (Es gibt keinen 33. März im Kalender). In diesem Fall passt JavaScript den 33. März automatisch auf den 2. April an.
// 33rd March => 2nd April
new Date(2019, 2, 33)

Das bedeutet, Sie müssen sich keine Gedanken über die Berechnung von Minuten, Stunden, Tagen, Monaten usw. machen, wenn Sie eine Differenz erstellen. JavaScript erledigt das automatisch für Sie.
// 33rd March => 2nd April
new Date(2019, 2, 30 + 3)

Und das ist alles, was Sie über das native Date-Objekt von JavaScript wissen müssen.
Mehr über Datum in JavaScript
- Datum und Uhrzeit in JavaScript verstehen (DigitalOcean)
- Das JavaScript Date-Objekt erkunden (Alligator.io)
Interessiert an mehr JavaScript?
Wenn Sie diese Einführung in Datum nützlich fanden, könnten Ihnen Learn JavaScript gefallen, ein Kurs, den ich erstellt habe, um Leuten alles beizubringen, was sie über JavaScript wissen müssen.
Im Kurs behandle ich die grundlegenden Konzepte, die Sie kennen müssen, und zeige Ihnen dann, wie Sie die gelernten Konzepte verwenden, um Komponenten für die reale Welt zu erstellen.
Schauen Sie es sich an. Möglicherweise finden Sie es hilfreich.
In der Zwischenzeit können Sie sich gerne an mich wenden, wenn Sie JavaScript-Fragen haben. Ich werde mein Bestes tun, um kostenlose Artikel zu erstellen, um Ihre Fragen zu beantworten.
Toller Artikel! Das deckt viele der Fallstricke ab, mit denen ich selbst oder beim Unterrichten anderer, die entweder Junior-Entwickler sind oder Sprachen mit robusteren Datums-/Zeitfunktionen gewohnt sind, zu kämpfen hatte.
Ich stoße ziemlich oft auf einen weiteren großen Fallstrick. Er tritt auf, wenn Daten mit der Methode JSON.stringify() an eine API gesendet werden, die Datumswerte mit Date.toISOString() in Strings konvertiert. Dies führt häufig zu Verwirrung, da die Daten, wie Sie in Ihrem Artikel beschreiben, ein 'Z' zur Angabe der UTC-Zeitzone verwenden. Wenn der Server die Zeitzone automatisch parst, ist dies kein Problem. In meiner Erfahrung stellen API-Entwickler jedoch oft nicht fest, dass das 'Z' die Zeitzone modifiziert, sodass sie das Datum auf dem Backend manuell parsen, ohne die Zeitzonenkonvertierung zu berücksichtigen, was zu falschen Daten führen kann.
Danke für diese großartige Ressource.
Die Arbeit mit Zeitstempeln, insbesondere bei der Arbeit mit Zeitzonen, scheint der beste Weg zu sein.
Gern geschehen! Schön, dass es geholfen hat :)
Vielen Dank für die wertvollen Kommentare. Ich stimme Ihren Gedanken zu!
2 schlecht, es erklärt nicht, wie man zum Beispiel das Datum eines Beitrags aus der Datenbank holt und es dann abhängig von einer Bedingung anzeigt.
Wenn das Datum heute ist, zeige „TEXT “ gefolgt von Stunden und Minuten an.
// Vergleich zwischen Datenbankwert von DATE/Zeit und Echtzeit
Andernfalls zeige das Datum als Tag/Monat/Jahr an.
Eigentlich nein, ich möchte vielleicht Veranstaltungen anzeigen, die sich auf einen Ort beziehen, und das Datum/die Uhrzeit in der lokalen Zeit dieses Ortes anzeigen/manipulieren, anstatt in meiner Browserzeit. Zusätzlich kann sich die lokale Zeitzone im Laufe der Zeit ändern (Sommer-/Winterzeit, die in der Vergangenheit vielleicht nicht existiert hat,...)
Sie überspringen einfach den kompliziertesten Teil bei der Handhabung von Daten und behaupten, er sei nicht nötig? Ich weiß, dass Browser native APIs zur Verfügung stellen, um mit Zeitzonen umzugehen. Es wäre interessanter gewesen, wenn Sie untersucht hätten, wie man die schwierigen Probleme mit nativen APIs tatsächlich löst.
Ich finde, dass die Handhabung absoluter Datums-/Uhrzeiten (d. h. eines bestimmten Moments in einer bestimmten Zeitzone) eigentlich ziemlich einfach ist, sobald man erkennt, dass man ein Date-Objekt mit date.getTime() / 1000 in einen Unix-Zeitstempel umwandeln und einen Zeitstempel mit new Date(timestamp * 1000) in ein Datum umwandeln kann. Wenn ich einen Zeitstempel an den Client sende, muss ich mich nicht darum kümmern, in welcher Zeitzone er sich befindet – er wird immer noch denselben absoluten Moment wie ich sehen, aber in seiner lokalen Zeitzone!
Außerdem sind Zeitstempel viel JSON-freundlicher!
Ich verstehe. Nun, meiner Meinung nach ist es möglicherweise immer noch am besten, mit Date-fns oder Moment umzugehen, wenn Sie komplizierte Dinge handhaben müssen.
Die Methode
Date.prototype.toLocaleString()leistet tatsächlich gute Arbeit beim Erstellen von menschenlesbaren Daten, wenn Sie eine Konfiguration übergeben. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleStringOh, interessant! Das wusste ich nicht! Danke fürs Teilen!
ToLocaleString ist weitaus nützlicher, als Sie es darstellen – es gibt das Datum so aus, wie es die lokale Kultur erwarten würde, was für die Internationalisierung großartig ist. Außerdem gibt es eine Reihe von Formatierungsoptionen, auf die Sie nicht eingegangen sind: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleString
Ich habe gerade davon erfahren. Ich werde es mir genauer ansehen :)
Ich habe versucht, @media mit dieser Webseite zum Laufen zu bringen, aber es ist mir nicht gelungen. Ich habe den folgenden CSS- und HTML-Code eingefügt. Was fehlt mir? Wenn ich versuche, die Seite zu verkleinern, wird der neue Stil für das entsprechende Pixel nicht wirksam. Der Stil min-width: 1281px funktioniert jedoch. Die darunter liegenden funktionieren nicht. Sehr seltsam und merkwürdig. Irgendwelche Eingaben oder Ideen? Meine Seite ist auf Codepen unter dem Benutzernamen Stevenson-Gerard, ich habe nur 1 Datei in meinem Profil, daher sollte sie ziemlich leicht zu finden sein. Jede Hilfe wäre willkommen.
Zell, oh mein Gott. Ich kann Ihnen gar nicht sagen, wie hilfreich das ist. Ich habe STUNDEN damit verbracht, mit Daten in JavaScript zu arbeiten. Diese Anleitung ist so hilfreich, um all die Nuancen bei der Arbeit damit und worauf man achten muss, zu erklären.
Vielen, vielen Dank dafür!
Von einem Entwickler mit mittlerweile 9 Jahren Erfahrung.
Gern geschehen, Zak. Freut mich, dass es geholfen hat!
Gute Zusammenfassung! Erklären Sie, wie man mit DST-Daten umgeht, das könnte ein nützlicher Tipp sein ;)
„months(monthIndex)“
Sie meinen wahrscheinlich
„months[monthIndex]“
Eine beeindruckende Freigabe! Ich habe dies gerade an einen Kollegen weitergeleitet, der
sich gerade mit diesem Thema beschäftigte. Und er hat mich tatsächlich zum Abendessen eingeladen, nur
weil ich es ihm zufällig gefunden habe... lol. Also lassen Sie mich das umformulieren....
Danke für das Essen! Aber ja, danke, dass Sie sich Zeit genommen haben, dieses Thema hier auf Ihrer Webseite zu besprechen.
Für die Formatierung von Daten habe ich das bisher eigentlich nur in D3 wirklich vertieft, aber ich finde ihre timeFormat()-Methode wirklich einfach, prägnant und vielseitig.
https://github.com/d3/d3-time-format/blob/v2.1.3/README.md#timeFormat
Toller Artikel, danke fürs Schreiben! Ich habe ihn bereits als Lesezeichen gespeichert :)
NB Ich glaube, Sie haben einen Tippfehler: Im Abschnitt „Einen benutzerdefinierten Datumsformat erstellen“ haben Sie im fünften Codebeispiel
months(d.getMonth()), was meiner Meinung nachmonths[d.getMonth()]sein sollteSo sehr ich auch den Array-Ansatz für Monate und Wochentage zur korrekten Benennung der Monate und Wochentage verwendet habe, muss ich die Verwendung von toLocaleString empfehlen, um die gleichen Ergebnisse zu erzielen.
Sicherlich funktioniert die im Artikel beschriebene Methode und ist bis zu einem gewissen Grad akzeptabel, aber gleichzeitig haben Sie die Möglichkeit (und Kompatibilität), zu schreiben
Wenn Sie einige voreingestellte Formate hinzufügen und sie in eine Funktion packen, kann das die Datumsformatierung in Projekten schnell erledigen.
Wenn Sie mehrere Date-Objekte mit denselben Formatierungsoptionen formatieren möchten, sollten Sie stattdessen Intl.DateTimeFormat verwenden
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat
Damit wäre Ihr Beispiel
Es gibt eine Alternative zum Hinzufügen von 3 Tagen zu einem Datum
Ich glaube, das ist ein Fehler
const monthName = months(d.getMonth())sollte
months[d.getMonth()]sein?Ein ziemlich guter Begleitartikel. https://zachholman.com/talk/utc-is-enough-for-everyone-right
Das ist großartig! Vielen Dank dafür, das hat viele Dinge bezüglich Daten geklärt. Obwohl ich moment.js liebe, werde ich vielleicht anfangen, meine eigenen Datumsmanipulationen zu implementieren!
Vielen Dank, dieser Artikel ist ein Meisterwerk!
Ich glaube, das ist die wichtigste Erkenntnis
new Date(2019, 9, 2).getTime() === Date.UTC(2019, 9, 2); // false, aber kann wahr sein, wenn Ihre LOKALE Zeitzone UTC ist
new Date(Date.UTC(2019, 9, 2)).getTime() === Date.UTC(2019, 9, 2); // true und wird es immer sein
Im Node-Umfeld ist es umgekehrt. Der stringbasierte Ansatz liefert ein nicht verschobenes Ergebnis. Aber der argumentbasierte Ansatz wird durch die automatische Zeitzonenverschiebung durcheinandergebracht. Habe es gerade in Node 16.8.0 getestet.