Temporal.Duration.compare()
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Phương thức tĩnh Temporal.Duration.compare() trả về một số (-1, 0 hoặc 1) cho biết duration đầu tiên ngắn hơn, bằng hay dài hơn duration thứ hai.
Cú pháp
Temporal.Duration.compare(duration1, duration2)
Temporal.Duration.compare(duration1, duration2, options)
Tham số
duration1-
Một chuỗi, một đối tượng, hoặc một instance
Temporal.Durationđại diện cho duration đầu tiên cần so sánh. Nó được chuyển đổi thành đối tượngTemporal.Durationbằng thuật toán giống nhưTemporal.Duration.from(). duration2-
Duration thứ hai cần so sánh, được chuyển đổi thành đối tượng
Temporal.Durationbằng thuật toán giống nhưduration1. optionsOptional-
Một đối tượng chứa thuộc tính sau:
relativeToOptional-
Một ngày(giờ) có múi giờ hoặc thuần túy cung cấp thông tin thời gian và lịch để giải quyết duration lịch (xem liên kết để biết cách giải thích chung của tùy chọn này). Bắt buộc nếu
duration1hoặcduration2là duration lịch (trừ khi chúng bằng nhau theo thành phần, trong trường hợp đó0được trả về mà không cần tính toán).
Giá trị trả về
Trả về -1 nếu duration1 ngắn hơn duration2, 0 nếu chúng bằng nhau, và 1 nếu duration1 dài hơn duration2.
Ngoại lệ
RangeError-
Được ném ra nếu
duration1hoặcduration2là duration lịch (cóyears,monthshoặcweekskhác không), vàrelativeTokhông được cung cấp.
Mô tả
Nếu relativeTo là một ngày-giờ có múi giờ, và duration1 hoặc duration2 là duration lịch, kết quả được tính bằng cách thêm các duration vào điểm bắt đầu, và sau đó so sánh các thời điểm kết quả. Nếu không, so sánh được thực hiện bằng cách chuyển đổi cả hai thành nano giây (giả sử ngày 24 giờ, và sử dụng lịch của relativeTo nếu cần) và so sánh kết quả.
Ví dụ
>Sử dụng 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
So sánh duration lịch
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
Sử dụng relativeTo có múi giờ
Sử dụng relativeTo có múi giờ, bạn có thể tính đến cả thay đổi giờ mùa hè. Vào ngày 2024-11-03, Mỹ chuyển từ giờ mùa hè sang giờ tiêu chuẩn, vì vậy ngày đó có 25 giờ vì đồng hồ được lùi lại 1 giờ.
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
Sắp xếp một mảng duration
Mục đích của hàm compare() này là đóng vai trò như một bộ so sánh để truyền vào Array.prototype.sort() và các hàm liên quan.
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' ]
Truyền tùy chọn như sau:
durations.sort((a, b) =>
Temporal.Duration.compare(a, b, {
relativeTo: Temporal.Now.zonedDateTimeISO(),
}),
);
Đặc tả
| Specification |
|---|
| Temporal> # sec-temporal.duration.compare> |