Ich gebe zu, dass ich diesen Artikel teilweise schreibe, weil ich ihn oft nachschlage und ihn beim nächsten Mal finden möchte. Das Formatieren eines Datumsstrings, den man von einer API in JavaScript erhält, kann viele Formen annehmen – alles von der vollständigen Einbindung von Moment.js für eine sehr feine Kontrolle bis hin zur Verwendung von nur ein paar Zeilen zur Aktualisierung. Dieser Artikel ist nicht als umfassend gedacht, sondern zielt darauf ab, den gängigsten Weg zur menschlichen Lesbarkeit zu zeigen.
ISO 8601 ist ein extrem gängiges Datumsformat. Das "Z" am Ende bedeutet, dass die Zeit im ISO 8601-Format den UTC-Standard verwendet, d.h. keine Zeitzone. Hier ist ein Beispiel: 2020-05-25T04:00:00Z. Wenn ich Daten von einer API abrufe, liegen sie typischerweise im ISO 8601-Format vor.
Wenn ich den obigen String in einem lesbareren Format formatieren wollte, z.B. May 25, 2020, würde ich das so machen
const dateString = '2020-05-14T04:00:00Z'
const formatDate = (dateString) => {
const options = { year: "numeric", month: "long", day: "numeric" }
return new Date(dateString).toLocaleDateString(undefined, options)
}
Hier ist, was ich tue...
Zuerst gebe ich Optionen für die gewünschte Formatierung der Ausgabe an. Es gibt viele, viele weitere Optionen, die wir dort übergeben könnten, um das Datum auf unterschiedliche Weise zu formatieren. Ich zeige hier nur ein recht gängiges Beispiel.
const options = { year: "numeric", month: "long", day: "numeric" }
Als Nächstes erstelle ich eine neue Date -Instanz, die einen einzelnen Zeitpunkt in einem plattformunabhängigen Format darstellt.
return new Date(dateString)
Schließlich verwende ich die Methode .toLocaleDateString(), um die Formatierungsoptionen anzuwenden.
return new Date(dateString).toLocaleDateString(undefined, options)
Beachten Sie, dass ich undefined übergeben habe. Wenn der Wert in diesem Fall nicht definiert ist, wird die Zeit durch die Standard-Locale repräsentiert. Sie können sie auch auf eine bestimmte Region/Sprache setzen. Oder, für internationalisierte Apps und Websites, können Sie übergeben, was der Benutzer ausgewählt hat (z.B. 'en-US' für die Vereinigten Staaten, 'de-DE' für Deutschland und so weiter). Es gibt ein schönes npm-Paket, das eine Liste weiterer Lokalisierungen und ihrer Codes enthält.
Ich hoffe, das hilft Ihnen beim Einstieg! Und High Fives an zukünftige Sarah, weil sie das nicht mehr an mehreren Stellen nachschauen muss. 🤚
Wie hast du dateString übergeben? Oder übersehe ich etwas?
Übergeben Sie die
dateStringVariable als Parameter an dieformatDateFunktion:formatDate(dateString)UTC ist kein Format, es ist ein Standard für die Zeit. Das Format, auf das Sie sich beziehen, nennt sich ISO 8601. Das "Z" am Ende bedeutet, dass die Zeit im ISO 8601-Format den UTC-Standard verwendet, d.h. keine Zeitzone.
Mein Fehler, danke! Aktualisiert.
Toller Artikel! Schön und prägnant.
Seit Intl in JS verfügbar ist, benutze ich es häufiger. Viel Kontrolle, besonders gut, um eine Vielzahl von Optionen einfach zu ändern, wenn man internationale Bedürfnisse hat.
MDN – https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat
Ich bin hierher gekommen und habe erwartet, eine Möglichkeit zu sehen, diesen Trick mit CSS zu machen.
Ich meine, wenn Sie einen Tag auf Ihrer Website hätten, könnten Sie JavaScript verwenden, um eine lokalisierte Version des Datums und dieses CSS als Fallback hinzuzufügen.
time:empty:after {
content: attr(datetime);
}
Ich habe festgestellt, dass das Übergeben von undefined für die Locale manchmal bedeutete, dass die falsche Locale verwendet wurde, wenn meine Sprache nicht die Standard-Locale des Browsers war. Daher stelle ich sicher, dass ich stattdessen navigator.languages übergebe (navigator.languages || navigator.language, wenn ich IE11-Unterstützung benötige).
Danke dafür, Sarah! Habe diesen Tab markiert, damit ich nicht immer wieder danach suchen muss :)
Es unterstützt sogar den persischen Kalender und Ziffern. Beispiele
https://gist.github.com/unicornist/0e37b3691551c42c716e96c125b99df7
IntlDateTimeFormat ist tatsächlich sehr nützlich. Außerdem empfehle ich die Bibliothek
date-fnshttps://date-fns.org/Sie basiert auch darauf und enthält einige weitere nützliche Methoden zum Hinzufügen/Subtrahieren von Tagen usw.
Ich werde das hier bookmarken, High Five an mich auch!