Signatur
Beschreibung
Temporal.PlainMonthDay ist Teil der Temporal API und speichert ausschließlich Monat und Tag eines Datums – unabhängig von einem konkreten Jahr oder einer Zeitzone. Typische Anwendungsfälle sind Geburtstage, Feiertage oder sonstige jährliche Ereignisse, bei denen das Jahr keine Rolle spielt.
Instanzen sind unveränderlich (immutable): Alle verändernden Operationen geben eine neue Instanz zurück. Der Kalender (calendar-Eigenschaft) bestimmt, wie Monat und Tag interpretiert werden; Standardwert ist 'iso8601'. Für proleptic-gregorianische Berechnungen ist dies meist die richtige Wahl.
Um von einem PlainMonthDay zu einem vollständigen Datum zu gelangen, wird die Methode toPlainDate({ year }) genutzt, die ein Temporal.PlainDate-Objekt für das angegebene Jahr erzeugt. Umgekehrt lässt sich aus einem Temporal.PlainDate per toPlainMonthDay() ein PlainMonthDay extrahieren.
Die Serialisierung erfolgt als ISO-8601-ähnliche Zeichenkette im Format --MM-DD (z. B. --12-25). Über Temporal.PlainMonthDay.from() kann ein Objekt sowohl aus einem solchen String als auch aus einem Plain-Objekt mit month- und day-Feldern erstellt werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $isoMonth Pflicht | number | Der Monat des Datums als ganze Zahl (1 = Januar … 12 = Dezember) im ISO-8601-Kalender. | |
| $isoDay Pflicht | number | Der Tag des Monats als ganze Zahl (1–31, je nach Monat). | |
| $calendar | string | Temporal.Calendar | 'iso8601' | Optionaler Kalender-Bezeichner oder Temporal.Calendar-Instanz; Standard ist 'iso8601'. |
| $referenceISOYear | number | 1972 | Ein internes Referenzjahr, das für nicht-gregorianische Kalender relevant ist; in der Regel nicht manuell gesetzt. |
Rückgabewert
Temporal.PlainMonthDay-Instanz.Beispiele
Geburtstag als PlainMonthDay erstellen und formatieren
// Temporal-Polyfill (z. B. @js-temporal/polyfill) importieren
// import { Temporal } from '@js-temporal/polyfill';
// Konstruktor: 24. Juni
const birthday = new Temporal.PlainMonthDay(6, 24);
console.log(birthday.toString()); // '--06-24'
console.log(birthday.month); // 6
console.log(birthday.day); // 24
// Aus String erzeugen
const xmas = Temporal.PlainMonthDay.from('--12-25');
console.log(xmas.toString()); // '--12-25'
// Aus Plain-Objekt
const newYear = Temporal.PlainMonthDay.from({ month: 1, day: 1 });
console.log(newYear.toString()); // '--01-01'
Nächstes Vorkommen eines jährlichen Ereignisses berechnen
// import { Temporal } from '@js-temporal/polyfill';
const anniversary = Temporal.PlainMonthDay.from('--09-15');
// Heutiges Datum
const today = Temporal.Now.plainDateISO();
// Ereignis im aktuellen Jahr
const thisYear = anniversary.toPlainDate({ year: today.year });
// Falls schon vorbei → nächstes Jahr nehmen
const nextOccurrence = Temporal.PlainDate.compare(thisYear, today) >= 0
? thisYear
: anniversary.toPlainDate({ year: today.year + 1 });
console.log(`Nächstes Jubiläum: ${nextOccurrence.toString()}`);
// Tage bis dahin
const diff = today.until(nextOccurrence);
console.log(`Noch ${diff.days} Tag(e).`);
// Wichtig · Fallstricke
Browser-Kompatibilität: Die Temporal API befindet sich im TC39 Stage-3-Prozess. Zum Zeitpunkt der Erstellung dieses Eintrags unterstützt kein Browser Temporal nativ im stabilen Kanal ohne Flags. Für Produktivcode sollte das Polyfill @js-temporal/polyfill eingesetzt werden.
Unveränderlichkeit: PlainMonthDay-Instanzen sind immutable – die Eigenschaften month und day sind schreibgeschützt. Verwende with({ month, day }), um eine modifizierte Kopie zu erzeugen.
Gleichheitsvergleich: Der ===-Operator vergleicht Referenzen, nicht Werte. Nutze stattdessen a.equals(b), um zwei PlainMonthDay-Werte inhaltlich zu vergleichen.
Schaltjahr-Sonderfall: Der 29. Februar (--02-29) ist ein gültiger PlainMonthDay. Beim Aufruf von toPlainDate({ year }) mit einem Nicht-Schaltjahr wird eine Exception geworfen – dies muss im Anwendungscode behandelt werden.