Start · Sprachen · JavaScript · Referenz · Intl.Locale.prototype.getWeekInfo()

Intl.Locale.prototype.getWeekInfo()

Methode

Gibt für eine <code>Intl.Locale</code> ein Objekt mit den Kalenderwochen-Konventionen <code>firstDay</code>, <code>weekend</code> und <code>minimalDays</code> zurück.

seit JavaScript Proposal „Intl Locale Info“ (Stage 3); Chrome/Edge Kategorie: method-property

Signatur

Intl.Locale.prototype.getWeekInfo()

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

Typ
{ firstDay: number, weekend: number[], minimalDays: number }
Beschreibung

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 8601 4.

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);
}
de-DE { firstDay: 1, weekend: [6, 7], minimalDays: 4 } en-US { firstDay: 7, weekend: [6, 7], minimalDays: 1 } he-IL { firstDay: 7, weekend: [5, 6], minimalDays: 1 }

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);
7 1

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(' '));
Mo. Di. Mi. Do. Fr. Sa. So.

// 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: 1 steht für Montag und 7 für Sonntag. Date.prototype.getDay() liefert dagegen 0 für Sonntag. Umrechnung: date.getDay() || 7.
  • Region ist entscheidend: Ohne Regionsangabe (z. B. nur 'en') greifen die Standarddaten der Sprache (für en die USA). Für verlässliche Ergebnisse gibst du eine Region an, also etwa 'en-GB' statt 'en'.
  • Nicht zusammenhängende Wochenenden: weekend kann Tage enthalten, die nicht direkt aufeinander folgen, oder nur einen einzigen Tag. Prüfe also mit includes() 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, minimalDays zu ändern. Verlasse dich also nicht ungeprüft darauf.