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 |
瀏覽器相容性
載入中…