Temporal.Duration.compare()
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Experimentell: Dies ist eine experimentelle Technologie
Überprüfen Sie die Browser-Kompatibilitätstabelle sorgfältig vor der Verwendung auf produktiven Webseiten.
Die statische Methode Temporal.Duration.compare()
gibt eine Zahl (-1, 0 oder 1) zurück, die angibt, ob die erste Dauer kürzer, gleich oder länger als die zweite Dauer ist.
Syntax
Temporal.Duration.compare(duration1, duration2)
Temporal.Duration.compare(duration1, duration2, options)
Parameter
duration1
-
Eine Zeichenkette, ein Objekt oder eine
Temporal.Duration
-Instanz, die die erste zu vergleichende Dauer repräsentiert. Sie wird mit demselben Algorithmus wieTemporal.Duration.from()
in einTemporal.Duration
-Objekt umgewandelt. duration2
-
Die zweite zu vergleichende Dauer, mit dem gleichen Algorithmus wie
duration1
in einTemporal.Duration
-Objekt umgewandelt. options
Optional-
Ein Objekt mit der folgenden Eigenschaft:
relativeTo
Optional-
Ein zonenbezogenes oder einfaches Datum (Zeit), das die Zeit- und Kalenderinformationen bereitstellt, um Kalenderdauern zu lösen (siehe den Link für die allgemeine Interpretation dieser Option). Erforderlich, wenn entweder
duration1
oderduration2
eine Kalenderdauer ist (es sei denn, sie sind komponentenweise gleich, dann wird ohne Berechnungen0
zurückgegeben).
Rückgabewert
Gibt -1
zurück, wenn duration1
kürzer als duration2
ist, 0
wenn sie gleich sind, und 1
wenn duration1
länger ist.
Ausnahmen
RangeError
-
Wird ausgelöst, wenn entweder
duration1
oderduration2
eine Kalenderdauer (sie hat einen nicht-nullyears
,months
oderweeks
) ist, undrelativeTo
nicht angegeben ist.
Beschreibung
Wenn relativeTo
ein zonengebundenes Datum-Zeit ist und entweder duration1
oder duration2
eine Kalenderdauer ist, wird das Ergebnis berechnet, indem die Dauern zum Ausgangspunkt hinzugefügt und dann die resultierenden Zeitpunkte verglichen werden. Andernfalls erfolgt der Vergleich durch Umwandlung beider in Nanosekunden (unter der Annahme von 24-Stunden-Tagen und ggf. Verwendung des Kalenders von relativeTo
) und Vergleich der Ergebnisse.
Beispiele
Verwendung von Temporal.Duration.compare()
const d1 = Temporal.Duration.from({ hours: 1, minutes: 30 });
const d2 = Temporal.Duration.from({ minutes: 100 });
console.log(Temporal.Duration.compare(d1, d2)); // -1
const d3 = Temporal.Duration.from({ hours: 2 });
const d4 = Temporal.Duration.from({ minutes: 110 });
console.log(Temporal.Duration.compare(d3, d4)); // 1
const d5 = Temporal.Duration.from({ hours: 1, minutes: 30 });
const d6 = Temporal.Duration.from({ seconds: 5400 });
console.log(Temporal.Duration.compare(d5, d6)); // 0
Vergleich von Kalenderdauern
const d1 = Temporal.Duration.from({ days: 31 });
const d2 = Temporal.Duration.from({ months: 1 });
console.log(
Temporal.Duration.compare(d1, d2, {
relativeTo: Temporal.PlainDate.from("2021-01-01"), // ISO 8601 calendar
}),
); // 0
console.log(
Temporal.Duration.compare(d1, d2, {
relativeTo: Temporal.PlainDate.from("2021-02-01"), // ISO 8601 calendar
}),
); // 1; February has 28 days
Verwendung von zonenbezogenem relativeTo
Unter Verwendung eines zonenbezogenen relativeTo
kann man sogar die Umstellung auf Sommerzeit berücksichtigen. Am 2024-11-03
wechselt die USA von Sommerzeit zu Standardzeit, sodass dieser Tag 25 Stunden hat, weil die Uhr um 1 Stunde zurückgestellt wird.
const d1 = Temporal.Duration.from({ days: 1 });
const d2 = Temporal.Duration.from({ hours: 24 });
console.log(
Temporal.Duration.compare(d1, d2, {
relativeTo: Temporal.ZonedDateTime.from(
"2024-11-03T01:00-04:00[America/New_York]",
),
}),
); // 1
Sortierung eines Arrays von Dauern
Der Zweck dieser compare()
-Funktion besteht darin, als Vergleichsfunktion übergeben zu werden, um in Array.prototype.sort()
und verwandten Funktionen verwendet zu werden.
const durations = [
Temporal.Duration.from({ hours: 1 }),
Temporal.Duration.from({ hours: 2 }),
Temporal.Duration.from({ hours: 1, minutes: 30 }),
Temporal.Duration.from({ hours: 1, minutes: 45 }),
];
durations.sort(Temporal.Duration.compare);
console.log(durations.map((d) => d.toString()));
// [ 'PT1H', 'PT1H30M', 'PT1H45M', 'PT2H' ]
Optionen so übergeben:
durations.sort((a, b) =>
Temporal.Duration.compare(a, b, {
relativeTo: Temporal.Now.zonedDateTimeISO(),
}),
);
Spezifikationen
Specification |
---|
Temporal proposal # sec-temporal.duration.compare |
Browser-Kompatibilität
BCD tables only load in the browser