Intl.DateTimeFormat() Konstruktor
Baseline
Weitgehend verfügbar
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit September 2017 browserübergreifend verfügbar.
Der Intl.DateTimeFormat() Konstruktor erstellt Intl.DateTimeFormat Objekte.
Probieren Sie es aus
const date = new Date(Date.UTC(2020, 11, 20, 3, 23, 16, 738));
// Results below assume UTC timezone - your results may vary
// Specify default date formatting for language (locale)
console.log(new Intl.DateTimeFormat("en-US").format(date));
// Expected output: "12/20/2020"
// Specify default date formatting for language with a fallback language (in this case Indonesian)
console.log(new Intl.DateTimeFormat(["ban", "id"]).format(date));
// Expected output: "20/12/2020"
// Specify date and time format using "style" options (i.e. full, long, medium, short)
console.log(
new Intl.DateTimeFormat("en-GB", {
dateStyle: "full",
timeStyle: "long",
timeZone: "Australia/Sydney",
}).format(date),
);
// Expected output: "Sunday, 20 December 2020 at 14:23:16 GMT+11"
Syntax
new Intl.DateTimeFormat()
new Intl.DateTimeFormat(locales)
new Intl.DateTimeFormat(locales, options)
Intl.DateTimeFormat()
Intl.DateTimeFormat(locales)
Intl.DateTimeFormat(locales, options)
Hinweis:
Intl.DateTimeFormat() kann mit oder ohne new aufgerufen werden. Beide Aufrufe erzeugen eine neue Intl.DateTimeFormat Instanz. Es gibt jedoch ein spezielles Verhalten, wenn es ohne new und der this Wert eine andere Intl.DateTimeFormat Instanz ist; siehe Rückgabewert.
Parameter
localesOptional-
Ein String mit einem BCP 47 Sprach-Tag oder einer
Intl.LocaleInstanz oder ein Array solcher Locale-Identifier. Die Standard-Locale des Laufzeitumgebung wird verwendet, wennundefinedübergeben wird oder keiner der angegebenen Locale-Identifier unterstützt wird. Für die allgemeine Form und Interpretation deslocalesArguments siehe die Parameterbeschreibung auf derIntlHauptseite.Die folgenden Unicode-Erweiterungsschlüssel sind erlaubt:
Diese Schlüssel können auch mit
options(wie unten aufgeführt) gesetzt werden. Wenn beide gesetzt sind, hat dieoptionsEigenschaft Vorrang. optionsOptional-
Ein Objekt. Zur besseren Lesbarkeit ist die Liste der Eigenschaften in Abschnitte unterteilt, basierend auf ihren Zwecken, einschließlich Locale-Optionen, Datum-Uhrzeit-Komponenten-Optionen und Style-Abkürzungen.
Locale-Optionen
localeMatcher-
Der zu verwendende Locale-Abgleich-Algorithmus. Mögliche Werte sind
"lookup"und"best fit"; der Standardwert ist"best fit". Für Informationen zu dieser Option siehe Locale-Identifizierung und -Verhandlung. calendar-
Der zu verwendende Kalender, wie z.B.
"chinese","gregory","persian", usw. Für eine Liste der unterstützten Kalenderarten sieheIntl.supportedValuesOf(); der Standard ist locale-abhängig. Diese Option kann auch durch dencaUnicode-Erweiterungsschlüssel gesetzt werden; wenn beide angegeben sind, hat dieseoptionsEigenschaft Vorrang. numberingSystem-
Das zu verwendende Nummerierungssystem für die Nummernformatierung, wie z.B.
"arab","hans","mathsans", usw. Für eine Liste der unterstützten Nummerierungssysteme sieheIntl.supportedValuesOf(); der Standard ist locale-abhängig. Diese Option kann auch durch dennuUnicode-Erweiterungsschlüssel gesetzt werden; wenn beide angegeben sind, hat dieseoptionsEigenschaft Vorrang. hour12-
Ob eine 12-Stunden-Zeit (anstelle einer 24-Stunden-Zeit) verwendet werden soll. Mögliche Werte sind
trueundfalse; der Standard ist locale-abhängig. Wenntrue, setzt diese OptionhourCycleentweder auf"h11"oder"h12", abhängig von der Locale. Wennfalse, setzt siehourCycleauf"h23".hour12überschreibt sowohl dashcLocale-Erweiterungstag als auch diehourCycleOption, falls eines oder beide vorhanden sind. hourCycle-
Der zu verwendende Stundenzyklus. Mögliche Werte sind
"h11","h12","h23"und"h24"; der Standardwert wird aushour12und Locale abgeleitet. Diese Option kann auch durch denhcUnicode-Erweiterungsschlüssel gesetzt werden; wenn beide angegeben sind, hat dieseoptionsEigenschaft Vorrang. timeZone-
Die zu verwendende Zeitzone. Kann jeder IANA Zeitzonenname sein, einschließlich benannten Identifikatoren wie
"UTC","America/New_York", und"Etc/GMT+8", und Offset-Identifikatoren wie"+01:00","-2359", und"+23". Der Standardwert ist die Zeitzone der Laufzeitumgebung, dieselbe Zeitzone die durchDate.prototype.toString()verwendet wird.
Datum-Uhrzeit-Komponenten-Optionen
weekday-
Die Darstellung des Wochentages. Mögliche Werte sind:
era-
Die Darstellung der Ära. Mögliche Werte sind:
year-
Die Darstellung des Jahres. Mögliche Werte sind
"numeric"und"2-digit". month-
Die Darstellung des Monats. Mögliche Werte sind:
day-
Die Darstellung des Tages. Mögliche Werte sind
"numeric"und"2-digit". dayPeriod-
Der Formatierungsstil für Tageszeiten wie "in the morning", "am", "noon", usw. Mögliche Werte sind
"narrow","short", und"long".Hinweis: Diese Option hat nur einen Effekt, wenn eine 12-Stunden-Uhr (
hourCycle: "h12"oderhourCycle: "h11") verwendet wird. Viele Locales verwenden denselben String unabhängig von der angegebenen Breite. hour-
Die Darstellung der Stunde. Mögliche Werte sind
"numeric"und"2-digit". minute-
Die Darstellung der Minute. Mögliche Werte sind
"numeric"und"2-digit". second-
Die Darstellung der Sekunde. Mögliche Werte sind
"numeric"und"2-digit". fractionalSecondDigits-
Die Anzahl der Ziffern zur Darstellung von Sekundenbruchteilen (alle zusätzlichen Ziffern werden abgeschnitten). Mögliche Werte sind von
1bis3. timeZoneName-
Die lokalisierte Darstellung des Zeitzonennamens. Mögliche Werte sind:
"long"-
Lange lokalisierte Form (z.B.,
Pacific Standard Time,Nordamerikanische Westküsten-Normalzeit) "short"-
Kurze lokalisierte Form (z.B.:
PST,GMT-8) "shortOffset"-
Kurze lokalisierte GMT-Format (z.B.,
GMT-8) "longOffset"-
Lange lokalisierte GMT-Format (z.B.,
GMT-08:00) "shortGeneric"-
Kurzes generisches nicht-ortsgebundenes Format (z.B.:
PT,Los Angeles Zeit). "longGeneric"-
Lang generisches nicht-ortsgebundenes Format (z.B.:
Pacific Time,Nordamerikanische Westküstenzeit)
Hinweis: Die Zeitzonendarstellung kann auf ein anderes Format zurückgreifen, wenn ein erforderlicher String nicht verfügbar ist. Zum Beispiel sollten die nicht-ortsgebundenen Formate die Zeitzone ohne einen bestimmten Landes/Stadt-Ort anzeigen, wie "Pacific Time", aber sie können auf eine Zeitzone wie "Los Angeles Time" zurückfallen.
Standardwerte der Datum-Uhrzeit-Komponenten
Wenn eine der Datum-Uhrzeit-Komponentenoptionen angegeben sind, müssen dateStyle und timeStyle undefined sein. Wenn alle Datum-Uhrzeit-Komponentenoptionen und dateStyle/timeStyle undefined sind, werden einige Standardoptionen für Datum-Uhrzeit-Komponenten gesetzt, die davon abhängen, mit welchem Objekt die Formatierungsmethode aufgerufen wurde:
- Beim Formatieren von
Temporal.PlainDateundDate, standardmäßig sindyear,month, unddayauf"numeric"gesetzt. - Beim Formatieren von
Temporal.PlainTime, standardmäßig sindhour,minute, undsecondauf"numeric"gesetzt. - Beim Formatieren von
Temporal.PlainYearMonth, standardmäßig sindyearundmonthauf"numeric"gesetzt. - Beim Formatieren von
Temporal.PlainMonthDay, standardmäßig sindmonthunddayauf"numeric"gesetzt. - Beim Formatieren von
Temporal.PlainDateTimeundTemporal.Instant, standardmäßig sindyear,month,day,hour,minute, undsecondauf"numeric"gesetzt.
Formatübereinstimmung
Implementierungen sind verpflichtet, mindestens die folgenden Subsets von Datum-Uhrzeit-Komponenten anzuzeigen:
weekday,year,month,day,hour,minute,secondweekday,year,month,dayyear,month,dayyear,monthmonth,dayhour,minute,secondhour,minute
Die angeforderten Datum-Uhrzeit-Komponentenstile entsprechen möglicherweise nicht direkt einem gültigen Format, das von der Locale unterstützt wird, sodass der Formatmatcher es erlaubt, festzulegen, wie die angeforderten Stile dem nächsten unterstützen Format zugeordnet werden.
formatMatcher-
Der zu verwendende Formatübereinstimmungs-Algorithmus. Mögliche Werte sind
"basic"und"best fit"; der Standardwert ist"best fit". Der Algorithmus für"best fit"ist implementierungsdefiniert, und"basic"ist definiert durch die Spezifikation. Diese Option wird nur verwendet, wenn sowohldateStyleals auchtimeStyleundefinedsind (sodass das Format jeder Datum-Uhrzeit-Komponente individuell anpassbar ist).
Style-Abkürzungen
dateStyle-
Der zu verwendende Datum-Formatierungsstil. Mögliche Werte sind
"full","long","medium", und"short". Es erweitert sich auf Stile fürweekday,day,month,year, undera, wobei die genaue Kombination von Werten von der Locale abhängt. Beim Formatieren von Objekten wieTemporal.PlainDate,Temporal.PlainYearMonth, undTemporal.PlainMonthDay, wirddateStylenur auf die für das Objekt relevanten Felder aufgelöst. timeStyle-
Der zu verwendende Zeit-Formatierungsstil. Mögliche Werte sind
"full","long","medium", und"short". Es erweitert sich auf Stile fürhour,minute,second, undtimeZoneName, wobei die genaue Kombination von Werten von der Locale abhängt.
Hinweis:
dateStyle und timeStyle können miteinander verwendet werden, aber nicht mit anderen Datum-Uhrzeit-Komponentenoptionen (z.B., weekday, hour, month, usw.).
Sie können je nach den enthaltenen Optionen verschiedene Objekttypen formatieren:
- Wenn
dateStyleangegeben ist, können SieTemporal.PlainDate,Temporal.PlainYearMonth, undTemporal.PlainMonthDayObjekte formatieren. - Wenn
timeStyleangegeben ist, können SieTemporal.PlainTimeObjekte formatieren. - Wenn entweder
dateStyleodertimeStyleangegeben ist, können SieTemporal.PlainDateTimeundDateObjekte formatieren.
Rückgabewert
Ein neues Intl.DateTimeFormat Objekt.
Hinweis: Der unten stehende Text beschreibt ein Verhalten, das von der Spezifikation als "optional" markiert ist. Es könnte nicht in allen Umgebungen funktionieren. Prüfen Sie die Browser-Kompatibilitätstabelle.
Normalerweise kann Intl.DateTimeFormat() mit oder ohne new aufgerufen werden, und eine neue Intl.DateTimeFormat Instanz wird in beiden Fällen zurückgegeben. Jedoch, wenn der this Wert ein Objekt ist, das instanceof Intl.DateTimeFormat ist (was nicht unbedingt bedeutet, dass es über new Intl.DateTimeFormat erstellt wurde; sondern dass es Intl.DateTimeFormat.prototype in seiner Prototypkette hat), dann wird der Wert von this stattdessen zurückgegeben, und das neu erstellte Intl.DateTimeFormat Objekt ist in einer [Symbol(IntlLegacyConstructedSymbol)] Eigenschaft verborgen (ein einzigartiges Symbol, das zwischen Instanzen wiederverwendet wird).
const formatter = Intl.DateTimeFormat.call(
{ __proto__: Intl.DateTimeFormat.prototype },
"en-US",
{ dateStyle: "full" },
);
console.log(Object.getOwnPropertyDescriptors(formatter));
// {
// [Symbol(IntlLegacyConstructedSymbol)]: {
// value: DateTimeFormat [Intl.DateTimeFormat] {},
// writable: false,
// enumerable: false,
// configurable: false
// }
// }
Beachten Sie, dass es hier nur eine tatsächliche Intl.DateTimeFormat Instanz gibt: diejenige, die in [Symbol(IntlLegacyConstructedSymbol)] verborgen ist. Das Aufrufen der Methoden format() und resolvedOptions() auf formatter würde korrekt die in dieser Instanz gespeicherten Optionen verwenden, aber das Aufrufen aller anderen Methoden (z.B., formatRange()) würde fehlschlagen: "TypeError: formatRange method called on incompatible Object", weil diese Methoden nicht die Optionen der versteckten Instanz konsultieren.
Dieses Verhalten, genannt ChainDateTimeFormat, tritt nicht auf, wenn Intl.DateTimeFormat() ohne new, aber mit this, das auf etwas anderes als instanceof Intl.DateTimeFormat gesetzt ist, aufgerufen wird. Wenn Sie es direkt als Intl.DateTimeFormat() aufrufen, ist der this Wert Intl, und eine neue Intl.DateTimeFormat Instanz wird normal erstellt.
Ausnahmen
RangeError-
Wird ausgelöst, wenn
localesoderoptionsungültige Werte enthalten.
Beispiele
>Verwendung von DateTimeFormat
Bei der grundlegenden Verwendung ohne Angabe einer Locale verwendet DateTimeFormat die Standard-Locale und Standardoptionen.
const date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));
// toLocaleString without arguments depends on the implementation,
// the default locale, and the default time zone
console.log(new Intl.DateTimeFormat().format(date));
// "12/19/2012" if run with en-US locale (language) and time zone America/Los_Angeles (UTC-0800)
Verwendung von timeStyle und dateStyle
dateStyle und timeStyle bieten eine Abkürzung zum Festlegen mehrerer Datum-Uhrzeit-Komponentenoptionen auf einmal. Zum Beispiel, für en-US, entspricht dateStyle: "short" dem Setzen von year: "2-digit", month: "numeric", day: "numeric", und timeStyle: "short" entspricht dem Setzen von hour: "numeric", minute: "numeric".
const shortTime = new Intl.DateTimeFormat("en-US", {
timeStyle: "short",
});
console.log(shortTime.format(Date.now())); // "1:31 PM"
const shortDate = new Intl.DateTimeFormat("en-US", {
dateStyle: "short",
});
console.log(shortDate.format(Date.now())); // "7/7/20"
const mediumTime = new Intl.DateTimeFormat("en-US", {
timeStyle: "medium",
dateStyle: "short",
});
console.log(mediumTime.format(Date.now())); // "7/7/20, 1:31:55 PM"
Die genauen (locale-abhängigen) Komponentenstile, die sie auflösen, sind jedoch nicht in den aufgelösten Optionen enthalten. Dies stellt sicher, dass das Ergebnis von resolvedOptions() direkt an den Intl.DateTimeFormat() Konstruktor übergeben werden kann (da ein options Objekt mit sowohl dateStyle oder timeStyle als auch individuellen Datums- oder Zeitkomponentenstilen nicht gültig ist).
console.log(shortDate.resolvedOptions().year); // undefined
Verwendung von dayPeriod
Verwenden Sie die dayPeriod Option, um einen String für die Tageszeiten ("in the morning", "at night", "noon", usw.) auszugeben. Beachten Sie, dass dies nur funktioniert, wenn für eine 12-Stunden-Uhr (hourCycle: 'h12' oder hourCycle: 'h11') formatiert wird und dass für viele Locales die Strings dieselben sind, unabhängig vom Wert, der für dayPeriod übergeben wird.
const date = Date.UTC(2012, 11, 17, 4, 0, 42);
console.log(
new Intl.DateTimeFormat("en-GB", {
hour: "numeric",
hourCycle: "h12",
dayPeriod: "short",
timeZone: "UTC",
}).format(date),
);
// 4 at night" (same formatting in en-GB for all dayPeriod values)
console.log(
new Intl.DateTimeFormat("fr", {
hour: "numeric",
hourCycle: "h12",
dayPeriod: "narrow",
timeZone: "UTC",
}).format(date),
);
// "4 mat." (same output in French for both narrow/short dayPeriod)
console.log(
new Intl.DateTimeFormat("fr", {
hour: "numeric",
hourCycle: "h12",
dayPeriod: "long",
timeZone: "UTC",
}).format(date),
);
// "4 du matin"
Verwendung von timeZoneName
Verwenden Sie die timeZoneName Option, um einen String für die Zeitzone ("GMT", "Pacific Time", usw.) auszugeben.
const date = Date.UTC(2021, 11, 17, 3, 0, 42);
const timezoneNames = [
"short",
"long",
"shortOffset",
"longOffset",
"shortGeneric",
"longGeneric",
];
for (const zoneName of timezoneNames) {
// Do something with currentValue
const formatter = new Intl.DateTimeFormat("en-US", {
timeZone: "America/Los_Angeles",
timeZoneName: zoneName,
});
console.log(`${zoneName}: ${formatter.format(date)}`);
}
// Logs:
// short: 12/16/2021, PST
// long: 12/16/2021, Pacific Standard Time
// shortOffset: 12/16/2021, GMT-8
// longOffset: 12/16/2021, GMT-08:00
// shortGeneric: 12/16/2021, PT
// longGeneric: 12/16/2021, Pacific Time
Spezifikationen
| Spezifikation |
|---|
| ECMAScript® 2026 Internationalization API Specification> # sec-intl-datetimeformat-constructor> |