Signatur
Beschreibung
getWeekInfo() gibt an, wie in einer Region die Woche aufgebaut ist: an welchem Tag sie beginnt, welche Tage als Wochenende gelten und wie viele Tage die erste Woche eines Jahres oder Monats mindestens haben muss. Die Daten kommen aus dem CLDR (Unicode Common Locale Data Repository), das die JavaScript-Engine mitbringt.
Die Wochentage sind als Ganzzahlen nach ISO 8601 codiert: 1 = Montag bis 7 = Sonntag. Das weicht von Date.prototype.getDay() ab, wo 0 für Sonntag steht.
Typische Einsatzfälle sind Kalender-Widgets und Datumsauswahlen, die die Wochenspalten in der richtigen Reihenfolge anzeigen sollen, das Hervorheben von Wochenenden (etwa in Israel Freitag/Samstag) und das Berechnen von Kalenderwochen. Mit der Unicode-Erweiterung -u-fw- (z. B. en-US-u-fw-mon) oder der Option { firstDayOfWeek: "mon" } im Konstruktor lässt sich der Wochenbeginn gezielt überschreiben.
Die Methode ersetzt die ältere Accessor-Eigenschaft Intl.Locale.prototype.weekInfo. Sie ist bewusst eine Methode, weil sie bei jedem Aufruf ein neues Objekt erzeugt.
Rückgabewert
Ein neues Objekt mit diesen Eigenschaften:
firstDay: erster Tag der Woche (1= Montag …7= Sonntag).weekend: Array der Wochenendtage, aufsteigend sortiert, z. B.[6, 7]. Die Tage liegen nicht immer direkt nebeneinander.minimalDays: Mindestanzahl an Tagen, die die erste Woche eines Monats oder Jahres haben muss (1–7). In Deutschland ist das nach ISO 86014.
Beispiele
Wochenkonventionen verschiedener Regionen vergleichen
const regionen = ['de-DE', 'en-US', 'he-IL'];
for (const tag of regionen) {
const info = new Intl.Locale(tag).getWeekInfo();
console.log(tag, info);
}
Wochenbeginn per Unicode-Erweiterung überschreiben
const standard = new Intl.Locale('en-US');
const montags = new Intl.Locale('en-US-u-fw-mon');
console.log(standard.getWeekInfo().firstDay);
console.log(montags.getWeekInfo().firstDay);
Kopfzeile für ein Kalender-Widget mit Fallback erzeugen
const getWeekInfoSafe = (locale) => {
const loc = new Intl.Locale(locale);
if (typeof loc.getWeekInfo === 'function') return loc.getWeekInfo();
if (loc.weekInfo) return loc.weekInfo; // ältere Chromium-Versionen
return { firstDay: 1, weekend: [6, 7], minimalDays: 4 }; // ISO-Fallback
};
const kalenderKopf = (locale) => {
const { firstDay, weekend } = getWeekInfoSafe(locale);
const fmt = new Intl.DateTimeFormat(locale, { weekday: 'short' });
// 2024-01-01 war ein Montag (ISO-Tag 1)
return Array.from({ length: 7 }, (_, i) => {
const isoTag = ((firstDay - 1 + i) % 7) + 1;
const datum = new Date(Date.UTC(2024, 0, isoTag, 12));
return { name: fmt.format(datum), wochenende: weekend.includes(isoTag) };
});
};
console.log(kalenderKopf('de-DE').map(t => t.name).join(' '));
// Wichtig · Fallstricke
- Kompatibilität: Die Methode stammt aus dem Proposal „Intl Locale Info“ und ist noch nicht Teil einer fertigen ECMAScript-Ausgabe. Chromium-Browser hatten zunächst nur die Getter-Eigenschaft
weekInfo(seit Chrome 99),getWeekInfo()kam erst später dazu. In Firefox fehlt die Funktion lange Zeit. Prüfe deshalb vor dem Aufruf, ob sie vorhanden ist (typeof locale.getWeekInfo === 'function'), und sieh einen Fallback vor. - Zählweise der Tage:
1steht für Montag und7für Sonntag.Date.prototype.getDay()liefert dagegen0für Sonntag. Umrechnung:date.getDay() || 7. - Region ist entscheidend: Ohne Regionsangabe (z. B. nur
'en') greifen die Standarddaten der Sprache (fürendie USA). Für verlässliche Ergebnisse gibst du eine Region an, also etwa'en-GB'statt'en'. - Nicht zusammenhängende Wochenenden:
weekendkann Tage enthalten, die nicht direkt aufeinander folgen, oder nur einen einzigen Tag. Prüfe also mitincludes()und nicht über einen Bereich. - Die Daten hängen von der CLDR-Version ab, die die Engine mitbringt, und können sich zwischen Browser- oder Node.js-Versionen leicht unterscheiden. Im Proposal wurde auch diskutiert,
minimalDayszu ändern. Verlasse dich also nicht ungeprüft darauf.