Signatur
Beschreibung
Die Accessor-Eigenschaft calendar einer Intl.Locale-Instanz liefert den Kalendertyp, der im Locale festgelegt ist. Er kann auf zwei Wegen gesetzt werden: über die Unicode-Erweiterung -u-ca- im Sprach-Tag (z. B. "th-TH-u-ca-buddhist") oder über die Option calendar im Konstruktor new Intl.Locale(tag, { calendar: "…" }). Gibt es beide, hat die Option Vorrang.
Wichtig: Die Eigenschaft gibt nur den ausdrücklich gesetzten Wert zurück. Fehlt die Angabe, ist das Ergebnis undefined. Der Standardkalender der Region wird dabei nicht ermittelt. Welche Kalender für ein Locale üblich sind, verrät Intl.Locale.prototype.getCalendars(). Welcher Kalender beim Formatieren tatsächlich verwendet wird, zeigt Intl.DateTimeFormat.prototype.resolvedOptions().calendar.
Typische Einsatzfälle sind das Auslesen und Prüfen von Benutzereinstellungen, das Weitergeben eines Locales samt Kalender an Intl.DateTimeFormat und die Normalisierung von Sprach-Tags. Gültige Werte sind BCP-47-Kalenderkennungen wie buddhist, chinese, coptic, ethiopic, gregory, hebrew, indian, islamic, islamic-umalqura, iso8601, japanese und persian. Eine vollständige Liste liefert Intl.supportedValuesOf("calendar").
Da es sich um eine reine Getter-Eigenschaft handelt, ist sie schreibgeschützt. Um einen anderen Kalender zu setzen, erzeugt man eine neue Intl.Locale-Instanz.
Rückgabewert
"gregory") oder undefined, wenn im Locale kein Kalender festgelegt ist.Beispiele
Kalender aus dem Sprach-Tag auslesen
const thai = new Intl.Locale("th-TH-u-ca-buddhist");
console.log(thai.calendar);
const de = new Intl.Locale("de-DE");
console.log(de.calendar);
Kalender per Option setzen – Option hat Vorrang
const loc = new Intl.Locale("ja-JP-u-ca-gregory", { calendar: "japanese" });
console.log(loc.calendar);
console.log(loc.toString());
Locale mit Kalender zum Formatieren von Datumsangaben nutzen
const datum = new Date(Date.UTC(2024, 0, 15));
const loc = new Intl.Locale("de-DE", { calendar: "hebrew" });
const fmt = new Intl.DateTimeFormat(loc, { dateStyle: "long", timeZone: "UTC" });
console.log(loc.calendar);
console.log(fmt.format(datum));
console.log(fmt.resolvedOptions().calendar);
Fallback auf den regionalen Standardkalender
const kalenderFuer = (tag) => {
const loc = new Intl.Locale(tag);
// calendar ist nur gesetzt, wenn explizit angegeben
return loc.calendar ?? loc.getCalendars?.()[0] ?? "gregory";
};
console.log(kalenderFuer("fa-IR"));
console.log(kalenderFuer("en-US-u-ca-iso8601"));
// Wichtig · Fallstricke
- Kein Standardwert:
calendargibtundefinedzurück, wenn kein Kalender angegeben wurde. Das gilt auch für Regionen wieth-TH, in denen ein anderer Kalender üblich ist. Für den tatsächlich verwendeten KalenderIntl.DateTimeFormat().resolvedOptions().calendarverwenden. - Nur lesbar: Die Eigenschaft hat keinen Setter. Eine Zuweisung wie
loc.calendar = "gregory"bleibt wirkungslos (im Strict ModeTypeError). - Validierung: Der Konstruktor prüft nur, ob der Wert syntaktisch gültig ist (3–8 alphanumerische Zeichen pro Teil). Unbekannte, aber formal gültige Werte wie
"foobar"werden akzeptiert, sonst wird einRangeErrorgeworfen. Zum Prüfen dientIntl.supportedValuesOf("calendar"). - Kanonisierung: Veraltete Aliasse können normalisiert werden, etwa
"islamicc"zu"islamic-civil"und"ethiopic-amete-alem"zu"ethioaa". - Kompatibilität:
Intl.Localeist seit Chrome 74, Firefox 75, Safari 14 und Node.js 12 verfügbar.getCalendars()ist neuer; in älteren Firefox-Versionen fehlt es, einige Engines kennen stattdessen nur den Gettercalendars.