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

Temporal.PlainDateTime.prototype.equals()

Methode

Prüft, ob ein <code>Temporal.PlainDateTime</code> einem anderen Datum-Uhrzeit-Wert entspricht, also gleiche Datums- und Zeitfelder und gleichen Kalender hat.

seit JavaScript ES2026 (Temporal) – Firefox 139+, Chrome 144+; Saf Kategorie: method-property

Signatur

Temporal.PlainDateTime.prototype.equals(other)

Beschreibung

Die Methode equals() vergleicht eine Temporal.PlainDateTime-Instanz mit einem anderen Datum-Uhrzeit-Wert. Sie gibt true zurück, wenn beide Werte in allen Feldern übereinstimmen. Dazu gehören Jahr, Monat, Tag, Stunde, Minute, Sekunde, Milli-, Mikro- und Nanosekunde. Zusätzlich muss der Kalender gleich sein.

Das Argument muss keine fertige Instanz sein. Alles, was Temporal.PlainDateTime.from() akzeptiert, wird vorher automatisch umgewandelt: ISO-8601-Strings, Objekte mit Feldern wie { year, month, day, hour } oder andere Temporal-Objekte.

Temporal-Objekte sind Objekte. Deshalb vergleichen === und == nur die Referenz und nicht den Wert. Nutzen Sie equals(), wenn Sie wissen wollen, ob zwei Zeitpunkte gleich sind, zum Beispiel beim Finden doppelter Termine oder beim Prüfen auf Änderungen. Wenn Sie sortieren oder wissen wollen, welcher Wert früher liegt, verwenden Sie stattdessen Temporal.PlainDateTime.compare().

Parameter

Name Typ Default Beschreibung
$other Pflicht Temporal.PlainDateTime | string | Object Der Vergleichswert: eine Temporal.PlainDateTime-Instanz, ein ISO-8601-String (z. B. "2024-05-01T09:30") oder ein Objekt mit Datums- und Zeitfeldern. Er wird wie mit Temporal.PlainDateTime.from() umgewandelt.

Beispiele

Instanz, Objekt und String vergleichen

const termin = Temporal.PlainDateTime.from("2024-05-01T09:30:00");

// Objekt mit Feldern
const ausFeldern = Temporal.PlainDateTime.from({
  year: 2024, month: 5, day: 1, hour: 9, minute: 30
});

console.log(termin.equals(ausFeldern));             // gleiche Werte
console.log(termin === ausFeldern);                 // nur Referenzvergleich
console.log(termin.equals("2024-05-01T09:30"));     // String wird umgewandelt
console.log(termin.equals("2024-05-01T09:30:00.000000001")); // 1 ns Unterschied
true false true false

Unterschiedlicher Kalender: equals() vs. compare()

const iso = Temporal.PlainDateTime.from("2024-05-01T09:30");
const japanisch = iso.withCalendar("japanese");

// Gleicher Zeitpunkt, aber anderer Kalender
console.log(iso.equals(japanisch));
console.log(Temporal.PlainDateTime.compare(iso, japanisch));

// Vor dem Vergleich den Kalender angleichen
console.log(iso.equals(japanisch.withCalendar("iso8601")));
false 0 true

Doppelte Termine aus einer Liste entfernen

const termine = [
  "2024-06-10T14:00",
  "2024-06-10T14:00:00",
  "2024-06-11T08:15",
  "2024-06-10T14:00:00.000"
].map((s) => Temporal.PlainDateTime.from(s));

const eindeutig = termine.reduce((liste, t) => {
  if (!liste.some((vorhanden) => vorhanden.equals(t))) liste.push(t);
  return liste;
}, []);

console.log(eindeutig.map((t) => t.toString()));
[ '2024-06-10T14:00:00', '2024-06-11T08:15:00' ]

Prüfen, ob ein Formularwert geändert wurde

const gespeichert = Temporal.PlainDateTime.from("2024-09-01T10:00");

const hatGeaendert = (eingabe) => !gespeichert.equals(eingabe);

// Wert aus <input type="datetime-local"> hat das Format YYYY-MM-DDTHH:mm
console.log(hatGeaendert("2024-09-01T10:00"));
console.log(hatGeaendert("2024-09-01T10:15"));
false true

// Wichtig · Fallstricke

  • Kalender zählt mit: Zwei Werte für denselben Zeitpunkt in verschiedenen Kalendern (z. B. iso8601 und japanese) sind laut equals() nicht gleich. Temporal.PlainDateTime.compare() ignoriert den Kalender dagegen und liefert 0.
  • Nanosekunden-Genauigkeit: Schon 1 ns Unterschied ergibt false. Wenn nur Minuten wichtig sind, runden Sie vorher, etwa mit dt.round({ smallestUnit: \"minute\" }).
  • Keine Zeitzone: PlainDateTime kennt keine Zeitzone und keinen Offset. Stehen in einem String Offset-Angaben wie Z oder +02:00, werden diese beim Umwandeln verworfen bzw. bei Z mit RangeError abgelehnt. Für echte Zeitpunkte ist Temporal.ZonedDateTime oder Temporal.Instant die richtige Wahl.
  • Fehler: Ist other nicht umwandelbar, wirft die Methode einen TypeError (falscher Typ) oder RangeError (ungültiger String oder ungültige Werte). Sie gibt dann nicht false zurück.
  • Kompatibilität: Temporal ist erst in neueren Browsern verfügbar, etwa Firefox ab Version 139 und Chromium ab etwa Version 144. Für ältere Umgebungen, Safari und Node.js brauchen Sie ein Polyfill wie @js-temporal/polyfill oder temporal-polyfill.