Temporal.Duration.compare()
静态方法 Temporal.Duration.compare()
返回一个数字(-1、0 或 1),表示第一个 duration 是否短于、等于或长于第二个 duration。
语法
Temporal.Duration.compare(duration1, duration2)
Temporal.Duration.compare(duration1, duration2, options)
参数
duration1
-
用于比较的第一个 duration,可以是字符串、对象或
Temporal.Duration
实例。它使用与Temporal.Duration.from()
相同的算法转换为Temporal.Duration
对象。 duration2
-
用于比较的第二个 duration,使用与
duration1
相同的算法转换为Temporal.Duration
对象。 options
可选-
包含以下属性的对象
relativeTo
可选-
一个时区日期(时间)或普通日期(时间),它提供解析 日历 duration 的时间和日历信息(有关此选项的通用解释,请参阅链接)。如果
duration1
或duration2
是日历 duration,则此选项是必需的(除非它们在组件上相等,在这种情况下,将不进行计算而返回0
)。
返回值
如果 duration1
短于 duration2
,则返回 -1
;如果它们相等,则返回 0
;如果 duration1
长于 duration2
,则返回 1
。
异常
RangeError
-
如果
duration1
或duration2
是 日历 duration(即years
、months
或weeks
非零),并且未提供relativeTo
,则抛出错误。
描述
如果 relativeTo
是一个带时区的日期时间,并且 duration1
或 duration2
是日历 duration,则通过将 duration 添加到起始点,然后比较结果的瞬间来计算结果。否则,通过将两者都转换为纳秒(假设一天为 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
比较日历 duration
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
使用带时区的 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
对 duration 数组进行排序
此 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 |
浏览器兼容性
加载中…