Signatur
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
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" }));
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());
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());
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);
// Wichtig · Fallstricke
- Andere Zählung als bei
Date:Date.prototype.getDay()gibt 0 (Sonntag) bis 6 (Samstag) zurück.dayOfWeekgibt 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 = 1wird im nicht-strikten Modus stillschweigend ignoriert und wirft im strikten Modus einenTypeError.with({ dayOfWeek })wird nicht unterstützt. - Kalenderabhängig: Wochentag-Namen nicht fest im Code hinterlegen, sondern mit
toLocaleString(locale, { weekday: "long" })oderIntl.DateTimeFormaterzeugen. Wie viele Tage eine Woche hat, steht indaysInWeek. - 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/polyfillodertemporal-polyfillverwenden.