Signatur
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
-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"));
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));
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"));
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));
// Wichtig · Fallstricke
- Vergleichsoperatoren gehen nicht:
a < bodera > bmitTemporal.PlainDatewerfen einenTypeError, weilvalueOf()absichtlich einen Fehler auslöst. Nimm immercompare()oderequals(). - Kalender wird ignoriert:
compare()gibt0zurück, sobald das ISO-Datum gleich ist, auch wenn die Kalender verschieden sind.equals()liefert in diesem Fallfalse. Brauchst du eine exakte Gleichheit einschließlich Kalender, nimmequals(). - Uhrzeit oder Zeitzone in einem übergebenen String werden bei der Umwandlung verworfen. Zum Beispiel wird
\"2024-03-15T23:59\"als2024-03-15behandelt. Ungültige Strings lösen einenRangeErroraus. - 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/polyfilloder vorher eine Prüfung mittypeof Temporal !== \"undefined\".