Start · Sprachen · JavaScript · Referenz · Temporal.ZonedDateTime.prototype.dayOfWeek

Temporal.ZonedDateTime.prototype.dayOfWeek

Eigenschaft

Gibt den 1-basierten Index des Wochentags für das lokale Datum eines <code>Temporal.ZonedDateTime</code> zurück (im ISO-Kalender: 1 = Montag bis 7 = Sonntag).

seit JavaScript ES2026 (Temporal) – Firefox 139+, Chrome 144+; Saf Kategorie: method-property

Signatur

get Temporal.ZonedDateTime.prototype.dayOfWeek

Beschreibung

Die Zugriffseigenschaft dayOfWeek liefert eine positive ganze Zahl für den Wochentag des Datums, das in der Zeitzone des Temporal.ZonedDateTime gilt. Im ISO-8601-Kalender (Standard) steht 1 für Montag und 7 für Sonntag. Anders als beim alten Date.prototype.getDay() gibt es also keine 0 und der Sonntag steht am Ende der Woche.

Der Wert hängt vom Kalendersystem ab. Wie viele Tage eine Woche hat, steht in daysInWeek. Der Wertebereich ist immer 1 bis daysInWeek. Bei allen derzeit unterstützten Kalendern hat die Woche 7 Tage.

Weil ein ZonedDateTime einen Zeitpunkt mit einer Zeitzone verbindet, kann derselbe Zeitpunkt je nach Zeitzone auf verschiedene Wochentage fallen. Die Eigenschaft eignet sich zum Beispiel, um Wochenenden zu erkennen, Öffnungszeiten zu prüfen oder den nächsten bestimmten Wochentag zu berechnen.

Die Eigenschaft ist schreibgeschützt: Sie hat einen Getter, aber keinen Setter. Auch with() nimmt dayOfWeek nicht an. Um den Wochentag zu ändern, rechnet man mit add() oder subtract() die passende Zahl von Tagen hinzu oder ab.

Rückgabewert

Typ
number
Beschreibung
Ganze Zahl von 1 bis daysInWeek. Im ISO-Kalender gilt: 1 = Montag, 2 = Dienstag, …, 7 = Sonntag.

Beispiele

Wochentag eines Termins auslesen

const termin = Temporal.ZonedDateTime.from("2024-03-15T10:00[Europe/Berlin]");

console.log(termin.dayOfWeek);
// Wochentag als Text – besser über Intl als über eine eigene Tabelle
console.log(termin.toLocaleString("de-DE", { weekday: "long" }));
5 Freitag

Derselbe Zeitpunkt, verschiedene Wochentage je nach Zeitzone

const zeitpunkt = Temporal.Instant.from("2024-03-17T23:30:00Z");

const utc = zeitpunkt.toZonedDateTimeISO("UTC");
const berlin = zeitpunkt.toZonedDateTimeISO("Europe/Berlin");

console.log(utc.dayOfWeek, utc.toPlainTime().toString());
console.log(berlin.dayOfWeek, berlin.toPlainTime().toString());
7 23:30:00 1 00:30:00

Wochenende erkennen und nächsten Montag berechnen

const istWochenende = (zdt) => zdt.dayOfWeek >= 6; // 6 = Samstag, 7 = Sonntag

const naechsterMontag = (zdt) => {
  const tage = (8 - zdt.dayOfWeek) % 7 || 7; // immer mindestens 1 Tag weiter
  return zdt.add({ days: tage }).with({ hour: 9, minute: 0 });
};

const jetzt = Temporal.ZonedDateTime.from("2024-03-15T16:45[Europe/Berlin]");
console.log(istWochenende(jetzt));
console.log(naechsterMontag(jetzt).toString());
false 2024-03-18T09:00:00+01:00[Europe/Berlin]

Umrechnung auf die Zählweise von Date.getDay()

const zdt = Temporal.ZonedDateTime.from("2024-03-17T12:00[Europe/Berlin]");

// Temporal: So = 7  →  Date.getDay(): So = 0
const legacyTag = zdt.dayOfWeek % 7;
console.log(zdt.dayOfWeek, legacyTag);
7 0

// Wichtig · Fallstricke

  • Andere Zählung als bei Date: Date.prototype.getDay() gibt 0 (Sonntag) bis 6 (Samstag) zurück. dayOfWeek gibt 1 (Montag) bis 7 (Sonntag) zurück. Wer alten Code umstellt, macht hier leicht Off-by-one-Fehler. Umrechnung: dayOfWeek % 7.
  • Die Zeitzone zählt: Der Wochentag bezieht sich auf das lokale Datum in der Zeitzone des Objekts. Nach withTimeZone() kann sich der Wert ändern, obwohl der Zeitpunkt gleich bleibt.
  • Schreibgeschützt: Eine Zuweisung wie zdt.dayOfWeek = 1 wird im nicht-strikten Modus stillschweigend ignoriert und wirft im strikten Modus einen TypeError. with({ dayOfWeek }) wird nicht unterstützt.
  • Kalenderabhängig: Wochentag-Namen nicht fest im Code hinterlegen, sondern mit toLocaleString(locale, { weekday: "long" }) oder Intl.DateTimeFormat erzeugen. Wie viele Tage eine Woche hat, steht in daysInWeek.
  • Kompatibilität: Temporal ist noch recht neu. Es ist in Firefox (ab 139) und Chromium-basierten Browsern (ab 144) verfügbar, in Safari und älteren Node.js-Versionen aber noch nicht. Für eine breite Unterstützung ein Polyfill wie @js-temporal/polyfill oder temporal-polyfill verwenden.