Signatur
Beschreibung
Die Methode equals() vergleicht ein Temporal.PlainMonthDay mit einem anderen Monat-Tag-Wert und gibt true zurück, wenn beide denselben Wert haben. Das Argument darf eine Temporal.PlainMonthDay-Instanz sein oder alles, was Temporal.PlainMonthDay.from() umwandeln kann, also z. B. ein String wie "12-24" bzw. "--12-24" oder ein Objekt wie { month: 12, day: 24 }.
Verglichen werden intern das ISO-Datum mit dem Referenzjahr und die Kalender-ID. Beim ISO-8601-Kalender ist das Referenzjahr immer 1972. Deshalb kommt es praktisch nur auf Monat und Tag an. Zwei Werte mit demselben Tag, aber in verschiedenen Kalendern (etwa iso8601 und japanese), gelten dagegen als ungleich.
Brauchen kannst du equals() für wiederkehrende Termine ohne Jahr: Geburtstage, Jahrestage, feste Feiertage wie Heiligabend oder Neujahr. Weil Temporal-Objekte Referenztypen sind, liefern === und == bei zwei verschiedenen Instanzen immer false, auch wenn ihr Wert gleich ist. Für den Wertvergleich ist equals() deshalb der richtige Weg.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $other Pflicht | Temporal.PlainMonthDay | string | Object | Der Monat-Tag-Wert, mit dem verglichen wird. Strings und Objekte werden wie bei Temporal.PlainMonthDay.from() umgewandelt. |
Rückgabewert
true, wenn Monat, Tag, Referenzjahr und Kalender übereinstimmen, sonst false.Beispiele
Einfacher Wertvergleich mit verschiedenen Eingabeformen
const heiligabend = Temporal.PlainMonthDay.from("12-24");
console.log(heiligabend.equals("--12-24"));
console.log(heiligabend.equals({ month: 12, day: 24 }));
console.log(heiligabend.equals(Temporal.PlainMonthDay.from({ monthCode: "M12", day: 25 })));
// Vorsicht: === vergleicht Referenzen, nicht Werte
console.log(heiligabend === Temporal.PlainMonthDay.from("12-24"));
Prüfen, ob heute ein Geburtstag ist
const geburtstage = [
{ name: "Anna", tag: Temporal.PlainMonthDay.from("03-14") },
{ name: "Ben", tag: Temporal.PlainMonthDay.from({ month: 7, day: 1 }) },
];
const heute = Temporal.Now.plainDateISO().toPlainMonthDay();
const kinder = geburtstage
.filter(({ tag }) => tag.equals(heute))
.map(({ name }) => name);
console.log(kinder.length ? `Alles Gute, ${kinder.join(", ")}!` : "Heute hat niemand Geburtstag.");
Unterschiedliche Kalender sind nie gleich
const datum = Temporal.PlainDate.from("2021-07-01");
const isoMd = datum.toPlainMonthDay();
const japanMd = datum.withCalendar("japanese").toPlainMonthDay();
console.log(isoMd.equals(japanMd));
// Nur Monat und Tag vergleichen, Kalender ignorieren:
const gleicherTag = isoMd.monthCode === japanMd.monthCode && isoMd.day === japanMd.day;
console.log(gleicherTag);
// Wichtig · Fallstricke
- Kalender zählt mit: Werte aus verschiedenen Kalendern liefern immer
false, auch wenn das Datum dasselbe ist. Willst du den Kalender ignorieren, vergleichemonthCodeunddaydirekt. - Kein
compare():Temporal.PlainMonthDayhat keine statische Methodecompare(), weil eine Reihenfolge ohne Jahr nicht eindeutig ist. Zum Sortieren wandelst du die Werte zuerst mittoPlainDate({ year })um. - Fehler: Ein ungültiger String (z. B.
"13-01") löst einenRangeErroraus. Ein unpassender Typ wienulloder eine Zahl löst einenTypeErroraus. - 29. Februar:
"02-29"ist gültig, weil das ISO-Referenzjahr 1972 ein Schaltjahr ist. - Kompatibilität: Temporal gibt es bisher nur in neueren Browsern (Firefox 139+, Chromium 144+). Für Safari und ältere Umgebungen brauchst du ein Polyfill wie
@js-temporal/polyfillodertemporal-polyfill.