Start · Sprachen · JavaScript · Referenz · Temporal.PlainMonthDay

Temporal.PlainMonthDay

Klasse

Repräsentiert einen Monat-Tag-Wert (z. B. 12-25 für den 25. Dezember) ohne Jahresangabe oder Zeitzone – ideal für jährlich wiederkehrende Termine.

seit JavaScript Stage 3 Proposal (TC39); noch kein Baseline-Browse Kategorie: core

Signatur

class Temporal.PlainMonthDay

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

Typ
Temporal.PlainMonthDay
Beschreibung
Eine neue, unveränderliche 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'
--06-24 6 24 --12-25 --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).`);
Nächstes Jubiläum: 2025-09-15 Noch 83 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.