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
-
Ein String, ein Objekt oder eine Instanz von
Temporal.Duration
, die die erste Dauer zum Vergleichen darstellt. Sie wird mittels desselben Algorithmus in einTemporal.Duration
-Objekt konvertiert wieTemporal.Duration.from()
. duration2
-
Die zweite Dauer zum Vergleichen, ebenfalls in ein
Temporal.Duration
-Objekt mit demselben Algorithmus wieduration1
konvertiert. options
Optional-
Ein Objekt, das die folgende Eigenschaft enthält:
relativeTo
Optional-
Ein zonales oder einfaches Datum bzw. eine Uhrzeit, das Informationen über die Zeit und den Kalender bereitstellt, um Kalenderdauern aufzulö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, in diesem Fall wird0
ohne Berechnungen 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 als duration2
ist.
Ausnahmen
RangeError
-
Wird ausgelöst, wenn entweder
duration1
oderduration2
eine Kalenderdauer ist (es hat eine nicht-nullyears
,months
, oderweeks
), undrelativeTo
nicht bereitgestellt wird.
Beschreibung
Wenn relativeTo
eine zonale Datum-Uhrzeit ist und entweder duration1
oder duration2
eine Kalenderdauer ist, wird das Ergebnis berechnet, indem die Dauern zum Ausgangspunkt hinzugefügt und dann die resultierenden Instants verglichen werden. Andernfalls erfolgt der Vergleich durch Umwandlung beider in Nanosekunden (unter der Annahme von 24-Stunden-Tagen und Verwendung des Kalenders von relativeTo
, falls notwendig) 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 zonalem relativeTo
Mit einem zonalen relativeTo
können Sie sogar Änderungen der Sommerzeit berücksichtigen. Am 2024-11-03
wechseln die USA von der Sommerzeit zur Normalzeit, 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
Sortieren eines Arrays von Dauern
Der Zweck dieser compare()
-Funktion ist es, als Vergleichsfunktion zu dienen, die an Array.prototype.sort()
und verwandte Funktionen übergeben wird.
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' ]
Übergeben Sie Optionen so:
durations.sort((a, b) =>
Temporal.Duration.compare(a, b, {
relativeTo: Temporal.Now.zonedDateTimeISO(),
}),
);
Spezifikationen
Specification |
---|
Temporal proposal # sec-temporal.duration.compare |