Start · Sprachen · JavaScript · Referenz · Temporal.PlainMonthDay.from()

Temporal.PlainMonthDay.from()

Methode

Erzeugt ein <code>Temporal.PlainMonthDay</code> aus einem anderen <code>PlainMonthDay</code>, einem Objekt mit Monat/Tag oder einem RFC-9557-String.

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

Signatur

Temporal.PlainMonthDay.from(info, options)

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

Typ
Temporal.PlainMonthDay
Beschreibung
Ein neues 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);
12-24 02-29 M07 15

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);
}
04-30 02-28 RangeError

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);
2025-02-28 boolean

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);
hebrew M07 15

// 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/polyfill oder temporal-polyfill einbinden.
  • 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 year dient nur zur Prüfung und geht danach verloren. Mit toPlainDate({ year }) fügst du später wieder ein Jahr hinzu.
  • overflow gilt nicht für Strings: Ein ungültiger String wie \"04-31\" löst immer einen RangeError aus, auch mit \"constrain\".
  • Es gibt kein PlainMonthDay.compare(). Weil die Reihenfolge ohne Jahr kalenderabhängig ist, vergleichst du am besten mit equals() oder nach der Umwandlung in ein PlainDate.
  • Zeitzonen- oder Uhrzeitangaben in Strings werden ignoriert. Ein Z-Suffix (UTC) wird jedoch mit einem RangeError abgelehnt.