Signatur
Beschreibung
Der Konstruktor Temporal.PlainDate() erzeugt ein unveränderliches Objekt, das ein Kalenderdatum ohne Uhrzeit und ohne Zeitzone darstellt. Beispiele dafür sind Geburtstage, Feiertage, Fälligkeitstermine oder Buchungstage. Anders als beim alten Date gibt es keine versteckte Uhrzeit um Mitternacht und keine Verschiebung durch die lokale Zeitzone.
Die drei Zahlen werden immer als ISO-8601-Werte interpretiert. Der Monat zählt dabei ab 1 (Januar = 1, nicht 0 wie bei Date). Mit dem optionalen vierten Argument legst du einen anderen Kalender fest, etwa "japanese" oder "hebrew". Das Datum wird dann in diesem Kalender dargestellt, die übergebenen Werte bleiben aber ISO-Werte.
Der Konstruktor ist streng: Ein ungültiges Datum wie der 30. Februar löst sofort einen RangeError aus. Es wird nichts stillschweigend korrigiert. In Anwendungscode ist deshalb oft Temporal.PlainDate.from() die bessere Wahl. Diese Methode nimmt auch Strings und Objekte an und kann mit der Option overflow: "constrain" Werte auf den gültigen Bereich begrenzen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $year Pflicht | number | ISO-Jahr als ganze Zahl, auch negativ oder 0 (astronomische Zählung). Nachkommastellen werden abgeschnitten. | |
| $month Pflicht | number | ISO-Monat von 1 bis 12. |
|
| $day Pflicht | number | ISO-Tag von 1 bis zur Anzahl der Tage im jeweiligen Monat. |
|
| $calendar | string | "iso8601" | Kalender-ID, z. B. "gregory", "japanese", "hebrew" oder "islamic-umalqura". Groß-/Kleinschreibung spielt keine Rolle. |
Rückgabewert
Temporal.PlainDate-Objekt. Bei ungültigen Werten wird ein RangeError ausgelöst.Beispiele
Einfaches Datum erzeugen und auslesen
const termin = new Temporal.PlainDate(2024, 3, 15);
console.log(termin.toString());
console.log(termin.dayOfWeek); // 1 = Montag … 7 = Sonntag
console.log(termin.daysInMonth);
console.log(termin.toLocaleString('de-DE', { dateStyle: 'full' }));
Strenge Prüfung: ungültiges Datum vs. from()
try {
new Temporal.PlainDate(2023, 2, 29); // 2023 ist kein Schaltjahr
} catch (err) {
console.log(err.constructor.name);
}
// from() begrenzt standardmäßig auf den gültigen Bereich
const korrigiert = Temporal.PlainDate.from(
{ year: 2023, month: 2, day: 29 },
{ overflow: 'constrain' }
);
console.log(korrigiert.toString());
Fälligkeitsdatum berechnen (Monatsende-Logik)
const rechnungsdatum = new Temporal.PlainDate(2024, 1, 31);
const faellig = rechnungsdatum.add({ months: 1 });
console.log(faellig.toString());
console.log(rechnungsdatum.until(faellig).days);
// Das Original bleibt unverändert (immutable)
console.log(rechnungsdatum.toString());
Datum mit anderem Kalender
// Die Argumente sind immer ISO-Werte, nur die Darstellung ändert sich
const datum = new Temporal.PlainDate(2024, 3, 15, 'japanese');
console.log(datum.toString());
console.log(datum.era, datum.eraYear);
console.log(datum.calendarId);
// Wichtig · Fallstricke
- Monat zählt ab 1: Anders als bei
new Date(2024, 2, 15)stehtnew Temporal.PlainDate(2024, 3, 15)für den 15. März. Das ist beim Umstieg eine häufige Fehlerquelle. - Nur mit
new: Ein Aufruf ohnenewlöst einenTypeErroraus. - Keine automatische Korrektur: Werte außerhalb des gültigen Bereichs (z. B. Monat 13 oder der 31. April) führen zu einem
RangeError.InfinityundNaNsind ebenfalls ungültig. Wenn Werte begrenzt statt abgelehnt werden sollen, nimmTemporal.PlainDate.from()mitoverflow: "constrain". - Kalender-Argument: Das Jahr ist immer das ISO-Jahr, auch wenn ein anderer Kalender angegeben ist. Ein Datum mit kalenderspezifischen Feldern (z. B.
era/eraYearoder hebräischer Monat) erzeugst du mitTemporal.PlainDate.from({ ..., calendar }). Kalender-Objekte werden nicht mehr unterstützt, nur noch String-IDs. - Wertebereich: Erlaubt sind Daten von etwa -271821-04-19 bis +275760-09-13.
- Vergleich:
===vergleicht Objekt-Referenzen. Für Datumsvergleiche nimmequals()oderTemporal.PlainDate.compare(). - Browser-Kompatibilität: Temporal ist neu. Unterstützt wird es in Firefox ab 139 und in Chromium-Browsern ab 144. Safari und ältere Node.js-Versionen brauchen einen Polyfill, etwa
@js-temporal/polyfillodertemporal-polyfill.