Spec-Zone.ru › JavaScript

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

См. также

  • Temporal.Duration
  • Temporal.Duration.prototype.subtract()

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API