Start · Sprachen · JavaScript · Referenz · Temporal.PlainDate.compare()

Temporal.PlainDate.compare()

Methode

Vergleicht zwei Kalenderdaten und gibt <code>-1</code>, <code>0</code> oder <code>1</code> zurück, je nachdem, ob das erste Datum vor, gleich oder nach dem zweiten liegt.

seit JavaScript Temporal (TC39-Proposal); Firefox 139+, Chrome/Edg Kategorie: method-property

Signatur

Temporal.PlainDate.compare(date1, date2)

Beschreibung

Die statische Methode Temporal.PlainDate.compare() vergleicht zwei Daten ohne Uhrzeit und ohne Zeitzone. Sie gibt -1 zurück, wenn date1 vor date2 liegt, 1, wenn es danach liegt, und 0, wenn beide auf denselben Tag fallen.

Die Signatur ist so gewählt, dass man die Methode direkt als Vergleichsfunktion an Array.prototype.sort() oder Array.prototype.toSorted() übergeben kann. So lassen sich Daten chronologisch sortieren, ohne Umwege über Zeitstempel oder String-Vergleiche.

Beide Argumente werden intern mit Temporal.PlainDate.from() umgewandelt. Du kannst also neben Temporal.PlainDate-Instanzen auch ISO-8601-Strings (z. B. "2024-03-15") oder Objekte wie { year: 2024, month: 3, day: 15 } übergeben. Verglichen wird das zugrunde liegende ISO-Datum. Den Kalender des Objekts lässt die Methode dabei außer Acht.

Parameter

Name Typ Default Beschreibung
$date1 Pflicht Temporal.PlainDate | string | Object Das erste Datum. Wird bei Bedarf wie mit Temporal.PlainDate.from() umgewandelt.
$date2 Pflicht Temporal.PlainDate | string | Object Das zweite Datum. Wird genauso wie date1 umgewandelt.

Rückgabewert

Typ
number
Beschreibung
-1, wenn date1 vor date2 liegt, 0 bei gleichem ISO-Datum und 1, wenn date1 nach date2 liegt.

Beispiele

Zwei Daten vergleichen

const ostern = Temporal.PlainDate.from("2024-03-31");
const weihnachten = Temporal.PlainDate.from("2024-12-24");

console.log(Temporal.PlainDate.compare(ostern, weihnachten));
console.log(Temporal.PlainDate.compare(weihnachten, ostern));
// Strings werden automatisch umgewandelt
console.log(Temporal.PlainDate.compare(ostern, "2024-03-31"));
-1 1 0

Termine chronologisch sortieren

const termine = [
  { titel: "Zahnarzt", datum: Temporal.PlainDate.from("2024-11-05") },
  { titel: "Urlaub", datum: Temporal.PlainDate.from("2024-07-20") },
  { titel: "Steuererklärung", datum: Temporal.PlainDate.from("2024-07-31") }
];

const sortiert = termine.toSorted((a, b) =>
  Temporal.PlainDate.compare(a.datum, b.datum)
);

console.log(sortiert.map((t) => `${t.datum} ${t.titel}`).join("\n"));

// Reine Datumslisten: compare direkt als Vergleichsfunktion übergeben
const tage = ["2024-05-01", "2023-12-31", "2024-01-15"]
  .map((s) => Temporal.PlainDate.from(s));
tage.sort(Temporal.PlainDate.compare);
console.log(tage.map(String));
2024-07-20 Urlaub 2024-07-31 Steuererklärung 2024-11-05 Zahnarzt ["2023-12-31", "2024-01-15", "2024-05-01"]

Prüfen, ob eine Rechnung überfällig ist

const istUeberfaellig = (faelligAm) => {
  const heute = Temporal.Now.plainDateISO();
  return Temporal.PlainDate.compare(heute, faelligAm) > 0;
};

console.log(istUeberfaellig("2000-01-01"));
console.log(istUeberfaellig("2999-12-31"));
true false

compare() und equals() bei verschiedenen Kalendern

const iso = Temporal.PlainDate.from("2024-03-15");
const japanisch = iso.withCalendar("japanese");

// compare() berücksichtigt nur das ISO-Datum
console.log(Temporal.PlainDate.compare(iso, japanisch));
// equals() prüft zusätzlich den Kalender
console.log(iso.equals(japanisch));
0 false

// Wichtig · Fallstricke

  • Vergleichsoperatoren gehen nicht: a < b oder a > b mit Temporal.PlainDate werfen einen TypeError, weil valueOf() absichtlich einen Fehler auslöst. Nimm immer compare() oder equals().
  • Kalender wird ignoriert: compare() gibt 0 zurück, sobald das ISO-Datum gleich ist, auch wenn die Kalender verschieden sind. equals() liefert in diesem Fall false. Brauchst du eine exakte Gleichheit einschließlich Kalender, nimm equals().
  • Uhrzeit oder Zeitzone in einem übergebenen String werden bei der Umwandlung verworfen. Zum Beispiel wird \"2024-03-15T23:59\" als 2024-03-15 behandelt. Ungültige Strings lösen einen RangeError aus.
  • Kompatibilität: Temporal ist noch nicht überall verfügbar. Es gibt die API in Firefox ab Version 139 und in Chromium-Browsern ab Version 144, in Safari noch nicht. Für produktiven Code empfiehlt sich ein Polyfill wie @js-temporal/polyfill oder vorher eine Prüfung mit typeof Temporal !== \"undefined\".