Start · Sprachen · JavaScript · Referenz · Temporal.PlainMonthDay.prototype.equals()

Temporal.PlainMonthDay.prototype.equals()

Methode

Prüft, ob dieses <code>Temporal.PlainMonthDay</code> denselben Wert hat wie ein anderes Monat-Tag-Objekt: gleicher Monat, gleicher Tag, gleiches Referenzjahr, gleicher Kalender.

seit JavaScript Temporal (ES-Vorschlag, Stage 3) – Firefox 139+, C Kategorie: method-property

Signatur

Temporal.PlainMonthDay.prototype.equals(other)

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

Typ
boolean
Beschreibung
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"));
true true false false

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.");
z. B. "Heute hat niemand Geburtstag." (abhängig vom aktuellen Datum)

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);
false true

// Wichtig · Fallstricke

  • Kalender zählt mit: Werte aus verschiedenen Kalendern liefern immer false, auch wenn das Datum dasselbe ist. Willst du den Kalender ignorieren, vergleiche monthCode und day direkt.
  • Kein compare(): Temporal.PlainMonthDay hat keine statische Methode compare(), weil eine Reihenfolge ohne Jahr nicht eindeutig ist. Zum Sortieren wandelst du die Werte zuerst mit toPlainDate({ year }) um.
  • Fehler: Ein ungültiger String (z. B. "13-01") löst einen RangeError aus. Ein unpassender Typ wie null oder eine Zahl löst einen TypeError aus.
  • 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/polyfill oder temporal-polyfill.