Die moderne Art
Die neue moderne Art, dies zu tun, ist die Verwendung von toLocaleDateString
denn es ermöglicht Ihnen nicht nur die Formatierung eines Datums mit korrekter Lokalisierung, sondern auch die Übergabe von Formatoptionen, um das gewünschte Ergebnis zu erzielen:
const date = new Date(2018, 2, 1)
const result = date.toLocaleDateString("en-GB", { // you can use undefined as first argument
year: "numeric",
month: "2-digit",
day: "2-digit",
})
console.log(result) // outputs “01/03/2018”
Oder Sie verwenden ein temporales Objekt ( noch im Entwurf , caniuse ) :
const date = new Temporal.PlainDate(2018, 3, 1) // also works with zoned date
const result = date.toLocaleString("en-GB", { // you can use undefined as first argument
year: "numeric",
month: "2-digit",
day: "2-digit",
})
console.log(result) // outputs “01/03/2018”
Wenn Sie undefined
als erstes Argument angeben, wird stattdessen die Browsersprache erkannt. Alternativ können Sie auch 2-digit
auch für die Jahresoption.
Leistung
Wenn Sie vorhaben, viele Daten zu formatieren, sollten Sie die Verwendung von Intl.DateTimeFormat
stattdessen:
const formatter = new Intl.DateTimeFormat("en-GB", { // <- re-use me
year: "numeric",
month: "2-digit",
day: "2-digit",
})
const date = new Date(2018, 2, 1) // can also be a Temporal object
const result = formatter.format(date)
console.log(result) // outputs “01/03/2018”
Der Formatierer ist mit Date- und Temporal-Objekten kompatibel.
Historische Daten
Anders als im Temporal-Konstruktor werden im Date-Konstruktor Jahre zwischen 0 und 99 als Jahre des 20. Jahrhunderts interpretiert. Um dies zu verhindern, initialisieren Sie das Datum wie folgt:
const date = new Date()
date.setFullYear(18, 2, 1) // the year is A.D. 18
Dies ist für Temporal-Objekte nicht erforderlich, aber Jahre unter 1000 enthalten in allen Fällen keine führenden Nullen, da der Formatierer (der für die Datums- und Temporal-API gemeinsam genutzt wird) keine Unterstützung für 4-digit
Formatierung überhaupt nicht. In diesem Fall müssen Sie die Formatierung manuell vornehmen (siehe unten).
Für das Format ISO 8601
Wenn Sie Ihr Date in der YYYY-MM-DD
Format (ISO 8601), sieht die Lösung anders aus:
const date = new Date(Date.UTC(2018, 2, 1))
const result = date.toISOString().split('T')[0]
console.log(result) // outputs “2018-03-01”
Ihr Eingabedatum sollte im UTC-Format sein oder toISOString()
wird das für Sie in Ordnung bringen. Dies geschieht durch die Verwendung von Date.UTC
wie oben dargestellt.
Historische Daten für das ISO 8601-Format
Anders als im Temporal-Konstruktor werden Jahre zwischen 0 und 99 im Date-Konstruktor als Jahre des 20. Jahrhunderts interpretiert. Um dies zu verhindern, initialisieren Sie das Datum so, dass es für das ISO 8601-Format verwendet wird:
const date = new Date()
date.setUTCFullYear(18, 2, 1) // the year is A.D. 18
Beachten Sie, dass das ISO-Format für zeitliche Objekte mit Daten vor dem Jahr 1000 oder nach dem Jahr 9999 ein unterschiedliche Formatierung im Vergleich zur alten Date-API. Es wird empfohlen, auf die benutzerdefinierte Formatierung zurückzugreifen, um unter allen Umständen vierstellige Jahreszahlen zu erzwingen.
Benutzerdefinierte 4-stellige Formatierung der Jahreszahl
Leider unterstützt das Formatierungsprogramm keine führenden Nullen in der Jahreszahl. Es gibt keine 4-digit
Option. Dies gilt auch für temporale Objekte, da sie denselben Formatierer verwenden.
Glücklicherweise zeigt das ISO-Format der Datums-API immer mindestens 4 Ziffern für das Jahr an, obwohl temporale Objekte dies nicht tun. Zumindest für die Date-API können Sie also historische Daten vor dem Jahr 1000 mit führenden Nullen formatieren, indem Sie auf einen manuellen Formatierungsansatz zurückgreifen, der einen Teil der ISO 8601-Formatmethode verwendet:
const date = new Date()
date.setUTCFullYear(18, 2, 1)
const ymd = date.toISOString().split('T')[0].split('-')
const result = `${ymd[2]}/${ymd[1]}/${ymd[0]}`
console.log(result) // outputs “01/03/0018”
Für ein temporales Objekt ist ein anderer Weg notwendig, da die ISOYearString
wird für Daten vor dem Jahr 1000 und nach dem Jahr 9999 unterschiedlich formatiert wie bereits erwähnt:
const date = new Temporal.PlainDate(2018, 3, 1) // also works with zoned date
const zeroPad = (n, digits) => n.toString().padStart(digits, '0');
const result = `${zeroPad(date.day, 2)}/${zeroPad(date.month, 2)}/${zeroPad(date.year, 4)}`;
console.log(result) // outputs “01/03/0018”
Sonstiges
Für die Date and Temporal API gibt es auch toLocaleTimeString
mit dem Sie die Uhrzeit eines Datums lokalisieren und formatieren können.