Signatur
Beschreibung
Temporal.PlainMonthDay.from() ist der empfohlene Weg, ein Kalenderdatum ohne Jahr anzulegen, also z. B. einen Geburtstag, einen Jahrestag oder einen wiederkehrenden Feiertag wie den 24. Dezember. Anders als der Konstruktor new Temporal.PlainMonthDay() nimmt die Methode verschiedene Eingabeformen an: ein bestehendes PlainMonthDay, das kopiert wird, ein einfaches Objekt mit Feldern wie month/monthCode und day oder einen String wie "12-24" oder "2024-02-29".
Übergibst du ein Objekt, ohne ein Jahr anzugeben, nutzt der ISO-Kalender intern das Referenzjahr 1972. Das ist ein Schaltjahr, deshalb ist der 29. Februar gültig. Gibst du dagegen ein year an, prüft die Methode Monat und Tag gegen dieses Jahr. Danach wird das Jahr verworfen. Für andere Kalender als ISO (z. B. "hebrew" oder "chinese") brauchst du entweder monthCode oder die Kombination year + month, weil die Monatsnummern dort je nach Jahr unterschiedlich sein können.
Die Option overflow legt fest, was mit ungültigen Werten passiert. Bei "constrain" (Standard) wird der Wert auf den nächsten gültigen Wert gekürzt, also wird aus dem 31. April der 30. April. Bei "reject" wird ein RangeError ausgelöst. Wenn Benutzereingaben streng geprüft werden sollen, ist "reject" meist die bessere Wahl.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $info Pflicht | Temporal.PlainMonthDay | Object | string | Die Quelle: ein PlainMonthDay (wird kopiert), ein Objekt mit day und entweder month oder monthCode (optional auch year, era/eraYear, calendar) oder ein RFC-9557-String wie "12-24", "2024-02-29" oder "2024-02-29[u-ca=iso8601]". |
|
| $options | Object | {} | Ein Objekt mit Optionen, aktuell nur overflow. |
| $options.overflow | "constrain" | "reject" | "constrain" | Legt fest, was bei Werten außerhalb des gültigen Bereichs passiert: "constrain" kürzt den Wert, "reject" löst einen RangeError aus. Gilt nur für Objekt-Eingaben. Ungültige Strings werden immer abgelehnt. |
Rückgabewert
Temporal.PlainMonthDay-Objekt. Auch wenn info schon ein PlainMonthDay ist, bekommst du eine eigenständige Kopie zurück. Löst einen TypeError aus, wenn info weder Objekt noch String ist oder Pflichtfelder fehlen, und einen RangeError, wenn Werte ungültig sind (bei overflow: "reject") oder ein String nicht dem Format entspricht.Beispiele
Aus Objekt und String erzeugen
const heiligabend = Temporal.PlainMonthDay.from({ month: 12, day: 24 });
const schalttag = Temporal.PlainMonthDay.from('02-29');
const ausDatum = Temporal.PlainMonthDay.from('2024-07-15');
console.log(heiligabend.toString());
console.log(schalttag.toString());
console.log(ausDatum.monthCode, ausDatum.day);
overflow: constrain vs. reject
// Standard: ungültiger Tag wird gekürzt
const april = Temporal.PlainMonthDay.from({ month: 4, day: 31 });
console.log(april.toString());
// Mit Jahr: der 29.02. wird gegen 2023 (kein Schaltjahr) geprüft
const feb = Temporal.PlainMonthDay.from({ year: 2023, month: 2, day: 29 });
console.log(feb.toString());
// Streng prüfen, etwa bei Formulareingaben
try {
Temporal.PlainMonthDay.from({ month: 4, day: 31 }, { overflow: 'reject' });
} catch (err) {
console.log(err.constructor.name);
}
Geburtstag im aktuellen Jahr berechnen
const geburtstag = Temporal.PlainMonthDay.from({ month: 2, day: 29 });
const heute = Temporal.Now.plainDateISO();
// In Nicht-Schaltjahren wird automatisch auf den 28.02. gekürzt
const diesesJahr = geburtstag.toPlainDate({ year: 2025 });
console.log(diesesJahr.toString());
const istHeute = geburtstag.equals(
Temporal.PlainMonthDay.from(heute)
);
console.log(typeof istHeute);
Nicht-ISO-Kalender mit monthCode
// Im hebräischen Kalender ist monthCode eindeutiger als month
const md = Temporal.PlainMonthDay.from({
calendar: 'hebrew',
monthCode: 'M07',
day: 15,
});
console.log(md.calendarId, md.monthCode, md.day);
// Wichtig · Fallstricke
- Browser-Unterstützung: Temporal ist relativ neu und nur in Firefox 139+ sowie Chrome/Edge 144+ verfügbar. Safari und Node.js unterstützen es noch nicht standardmäßig. Für den produktiven Einsatz solltest du einen Polyfill wie
@js-temporal/polyfillodertemporal-polyfilleinbinden. - Kurzform
"MM-DD"nur mit ISO: Strings ohne Jahr sind nur mit dem ISO-8601-Kalender erlaubt. Bei anderen Kalendern muss der String ein vollständiges Datum mit Kalender-Annotation enthalten. - Das Jahr wird verworfen: Ein angegebenes
yeardient nur zur Prüfung und geht danach verloren. MittoPlainDate({ year })fügst du später wieder ein Jahr hinzu. overflowgilt nicht für Strings: Ein ungültiger String wie\"04-31\"löst immer einenRangeErroraus, auch mit\"constrain\".- Es gibt kein
PlainMonthDay.compare(). Weil die Reihenfolge ohne Jahr kalenderabhängig ist, vergleichst du am besten mitequals()oder nach der Umwandlung in einPlainDate. - Zeitzonen- oder Uhrzeitangaben in Strings werden ignoriert. Ein
Z-Suffix (UTC) wird jedoch mit einemRangeErrorabgelehnt.