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

Temporal.ZonedDateTime.prototype.equals()

Methode

Prüft, ob ein <code>Temporal.ZonedDateTime</code> mit einem anderen in Zeitpunkt, Zeitzone und Kalender übereinstimmt, und gibt <code>true</code> oder <code>false</code> zurück.

seit JavaScript Temporal (ES-Proposal); Firefox 139+, Chrome 144+; Kategorie: method-property

Signatur

Temporal.ZonedDateTime.prototype.equals(other)

Beschreibung

equals() vergleicht die aktuelle Temporal.ZonedDateTime-Instanz mit einem anderen Wert. Das Ergebnis ist nur dann true, wenn alle drei Bestandteile übereinstimmen:

  • der exakte Zeitpunkt (epochNanoseconds),
  • die Zeitzone (verglichen über den kanonischen Bezeichner),
  • der Kalender (calendarId).

Der Parameter other muss kein ZonedDateTime-Objekt sein. Er wird intern mit Temporal.ZonedDateTime.from() umgewandelt. Du kannst also auch einen RFC-9557-String mit Zeitzonen-Annotation (z. B. "2024-03-31T10:00:00+02:00[Europe/Berlin]") oder ein Objekt mit den passenden Feldern übergeben.

Nutze equals(), wenn zwei Werte vollständig gleich sein müssen, etwa beim Prüfen auf Änderungen oder bei Duplikaten. Willst du nur wissen, ob zwei Werte denselben Zeitpunkt meinen, egal in welcher Zeitzone, nimm Temporal.ZonedDateTime.compare() (Ergebnis 0) oder vergleiche die Werte von toInstant(). Die Operatoren === und == sind dafür nicht geeignet: Sie vergleichen nur Objektreferenzen.

Parameter

Name Typ Default Beschreibung
$other Pflicht Temporal.ZonedDateTime | string | object Das Datum mit Uhrzeit, mit dem verglichen wird. Es wird mit Temporal.ZonedDateTime.from() umgewandelt. Ein String braucht eine Zeitzonen-Annotation in eckigen Klammern, zum Beispiel [Europe/Berlin].

Rückgabewert

Typ
boolean
Beschreibung
true, wenn Zeitpunkt, Zeitzone und Kalender übereinstimmen, sonst false.

Beispiele

Zwei gleiche Termine vergleichen

const a = Temporal.ZonedDateTime.from("2024-03-31T10:00:00+02:00[Europe/Berlin]");
const b = Temporal.ZonedDateTime.from("2024-03-31T10:00:00+02:00[Europe/Berlin]");

console.log(a.equals(b)); // Wertvergleich
console.log(a === b);     // nur Referenzvergleich
true false

Gleicher Zeitpunkt, andere Zeitzone

const berlin = Temporal.ZonedDateTime.from("2024-06-01T12:00:00+02:00[Europe/Berlin]");
const london = berlin.withTimeZone("Europe/London");

console.log(berlin.equals(london));                          // Zeitzone unterscheidet sich
console.log(Temporal.ZonedDateTime.compare(berlin, london)); // gleicher Zeitpunkt
console.log(berlin.toInstant().equals(london.toInstant()));
false 0 true

Vergleich mit einem String und einem anderen Kalender

const termin = Temporal.ZonedDateTime.from("2024-12-24T18:00:00+01:00[Europe/Berlin]");

// String wird automatisch mit from() umgewandelt
console.log(termin.equals("2024-12-24T18:00:00+01:00[Europe/Berlin]"));

// Gleicher Zeitpunkt, aber Kalender "gregory" statt "iso8601"
console.log(termin.equals(termin.withCalendar("gregory")));
true false

Änderung eines Termins erkennen

const original = Temporal.ZonedDateTime.from("2025-01-15T09:30:00+01:00[Europe/Berlin]");
const bearbeitet = original.with({ minute: 45 });

const istGeaendert = (alt, neu) => !alt.equals(neu);

console.log(istGeaendert(original, original.with({ minute: 30 })));
console.log(istGeaendert(original, bearbeitet));
false true

// Wichtig · Fallstricke

  • Strenger Vergleich: Zwei Werte für denselben Zeitpunkt in verschiedenen Zeitzonen sind nicht gleich. Eine feste Verschiebung wie "+01:00" und eine benannte Zone wie "Europe/Berlin" gelten ebenfalls als unterschiedlich, auch wenn die Uhrzeit gleich ist. Für einen reinen Vergleich des Zeitpunkts nimm compare() oder toInstant().equals().
  • Alias-Zeitzonen: Zeitzonen werden über ihren kanonischen Bezeichner verglichen. Aliase wie Asia/Calcutta und Asia/Kolkata gelten daher als gleich, auch wenn timeZoneId unterschiedliche Strings liefert.
  • Kalender zählt mit: iso8601 und gregory sind unterschiedliche Kalender. Der Vergleich ergibt dann false.
  • Fehler bei ungültigem Argument: Lässt sich other nicht umwandeln, wirft die Methode einen Fehler. Ein String ohne Zeitzonen-Annotation (z. B. "2024-01-01T10:00") führt zu einem RangeError, ein falscher Typ wie null zu einem TypeError.
  • Nicht mit === vergleichen: Temporal-Objekte sind Referenztypen. Die Methode valueOf() wirft absichtlich einen TypeError, deshalb funktionieren auch < und > nicht.
  • Kompatibilität: Temporal ist noch nicht in allen Browsern verfügbar. Für ältere Umgebungen gibt es Polyfills wie @js-temporal/polyfill oder temporal-polyfill.