Temporal.Duration.compare()
Baseline Ограниченная доступность
Эта функция не является Baseline, так как она не работает в некоторых наиболее широко используемых браузерах.
Статический метод Temporal.Duration.compare() возвращает число (-1, 0 или 1), указывающее, является ли первая длительность короче, равной или длиннее второй длительности.
Синтаксис
Temporal.Duration.compare(duration1, duration2) Temporal.Duration.compare(duration1, duration2, options)
Параметры
-
duration1 - Строка, объект или экземпляр
Temporal.Duration, представляющий первую сравниваемую длительность. Он преобразуется в объектTemporal.Duration, используя тот же алгоритм, что иTemporal.Duration.from(). -
duration2 - Вторая сравниваемая длительность, преобразованная в объект
Temporal.Duration, используя тот же алгоритм, что иduration1. -
optionsНеобязательный - Объект, содержащий следующее свойство:
-
relativeToНеобязательный - Зонная или простая дата (время), предоставляющая информацию о времени и календаре для разрешения календарных длительностей (см. ссылку для общей интерпретации этого параметра). Требуется, если
duration1илиduration2является календарной длительностью (если они не равны по компонентам, в этом случае0возвращается без вычислений).
-
Возвращаемое значение
Возвращает -1, если duration1 короче duration2, 0, если они равны, и 1, если duration1 длиннее duration2.
Исключения
-
RangeError - Выбрасывается, если
duration1илиduration2является календарной длительностью (имеет ненулевыеyears,monthsилиweeks), иrelativeToне предоставлен.
Описание
Если relativeTo является зонированным временем, а duration1 или duration2 является календарной длительностью, результат вычисляется путем добавления длительностей к начальной точке, а затем сравнения полученных моментов времени. В противном случае сравнение выполняется путем преобразования обеих длительностей в наносекунды (предполагая 24-часовые дни и используя календарь relativeTo при необходимости) и сравнения результатов.
Примеры
Использование 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
Сравнение календарных длительностей
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
Использование zoned relativeTo
Используя зонное relativeTo, вы можете даже учитывать изменения перехода на летнее время. 2024-11-03 в США происходит переход с летнего времени на стандартное, поэтому этот день имеет 25 часов, так как часы переводятся на 1 час назад.
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
Сортировка массива длительностей
Цель этой функции compare() — выступать в качестве компаратора, который можно передать в Array.prototype.sort() и связанные с ней функции.
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' ]
Передайте параметры следующим образом:
durations.sort((a, b) =>
Temporal.Duration.compare(a, b, {
relativeTo: Temporal.Now.zonedDateTimeISO(),
}),
);
Спецификации
| Спецификация |
|---|
| Temporal # sec-temporal.duration.compare |
Совместимость с браузерами
| Настольные компьютеры | Мобильные устройства | Сервер | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on iOS | Samsung Internet | WebView Android | WebView on iOS | Bun | Deno | Node.js | |
compare |
144 |
144 |
139 |
128 |
preview |
144 |
139 |
95 |
No |
No |
144 |
No |
1.4.0 |
2.7 |
26.0.0 |
См. также
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration/compare