Temporal.Duration.prototype.round()
Khả dụng hạn chế
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Phương thức round() của các instance Temporal.Duration trả về một đối tượng Temporal.Duration mới với duration được làm tròn đến đơn vị nhỏ nhất đã cho và/hoặc cân bằng đến đơn vị lớn nhất đã cho.
Cú pháp
round(smallestUnit)
round(options)
Tham số
smallestUnit-
Một chuỗi đại diện cho tùy chọn
smallestUnit. Đây là cú pháp tắt tiện lợi, vì vậyround(smallestUnit)tương đương vớiround({ smallestUnit }), trong đósmallestUnitlà một chuỗi. options-
Một đối tượng chứa một số hoặc tất cả các thuộc tính sau (theo thứ tự chúng được truy xuất và xác thực):
largestUnitOptional-
Bất kỳ đơn vị thời gian nào:
"years","months","weeks","days","hours","minutes","seconds","milliseconds","microseconds","nanoseconds", hoặc các dạng số ít của chúng, hoặc giá trị"auto"có nghĩa là thành phần khác không lớn nhất của duration này hoặcsmallestUnit, tùy theo cái nào lớn hơn. Mặc định là"auto". Kết quả sẽ không chứa các đơn vị lớn hơn đơn vị này; ví dụ, nếu đơn vị lớn nhất là"minutes", thì "1 giờ 30 phút" sẽ trở thành "90 phút". relativeToOptional-
Một ngày/giờ có múi hoặc đơn giản cung cấp thông tin thời gian và lịch để giải quyết calendar duration (xem liên kết để biết cách diễn giải chung của tùy chọn này). Bắt buộc nếu
thishoặcotherlà calendar duration, hoặcsmallestUnitlà một đơn vị lịch. roundingIncrementOptional-
Một số (được cắt bỏ thành số nguyên) đại diện cho bước làm tròn trong
smallestUnitđã cho. Mặc định là1. Phải nằm trong khoảng từ 1 đến 1e9, bao gồm cả hai đầu. Nếu đơn vị nhỏ nhất là giờ, phút, giây, millisecond, microsecond, hoặc nanosecond, bước tăng phải là ước số của giá trị tối đa của đơn vị; ví dụ, nếu đơn vị là giờ, bước tăng phải là ước số của 24 và không được là 24 chính nó, nghĩa là có thể là 1, 2, 3, 4, 6, 8, hoặc 12. roundingModeOptional-
Một chuỗi đại diện cho chế độ làm tròn, xác định cách làm tròn lên hoặc xuống trong các tình huống khác nhau. Xem
Intl.NumberFormat(). Mặc định là"halfExpand". smallestUnitOptional-
Bất kỳ đơn vị thời gian nào:
"years","months","weeks","days","hours","minutes","seconds","milliseconds","microseconds","nanoseconds", hoặc các dạng số ít của chúng. Mặc định là"nanoseconds". Đối với các đơn vị lớn hơn"nanoseconds", phần phân số củasmallestUnitsẽ được làm tròn theo cài đặtroundingIncrementvàroundingMode. Phải nhỏ hơn hoặc bằnglargestUnit. Ít nhất một trongsmallestUnitvàlargestUnitphải được cung cấp.
Giá trị trả về
Một đối tượng Temporal.Duration mới, trong đó đơn vị lớn nhất không lớn hơn tùy chọn largestUnit, và đơn vị nhỏ nhất không nhỏ hơn tùy chọn smallestUnit. Các phần phân số của smallestUnit được làm tròn theo cài đặt roundingIncrement và roundingMode.
Ngoại lệ
RangeError-
Được ném ra nếu bất kỳ tùy chọn nào không hợp lệ.
Mô tả
Phương thức round() thực hiện hai thao tác: làm tròn và cân bằng. Nó thực hiện như sau:
- Đảm bảo duration được cân bằng. Nếu một thành phần vượt quá giá trị tối đa ưu tiên của nó (24 giờ mỗi ngày, 60 phút mỗi giờ, v.v.), phần dư được chuyển lên đơn vị lớn hơn tiếp theo, cho đến khi đạt
largestUnit. Ví dụ, "24 giờ 90 phút" trở thành "25 giờ 30 phút" nếulargestUnitlà"auto", và "1 ngày 1 giờ 30 phút" nếulargestUnitlà"days". - Đối với tất cả các thành phần lớn hơn
largestUnit, chúng được chuyển xuốnglargestUnit; ví dụ, "2 giờ 30 phút" trở thành "150 phút" nếulargestUnitlà"minutes". - Đối với tất cả các thành phần nhỏ hơn
smallestUnit, chúng được chuyển lênsmallestUnitnhư một phần phân số, và sau đó được làm tròn theo cài đặtroundingIncrementvàroundingMode. Ví dụ, "1 giờ 30 phút" trở thành "1.5 giờ" nếusmallestUnitlà"hours", sau đó được làm tròn thành "2 giờ" với cài đặt mặc định.
Đơn vị lịch có độ dài không đều. Độ dài của chúng được giải quyết tương đối với một điểm bắt đầu. Ví dụ, một duration "2 năm" trong lịch Gregorian có thể dài 730 hoặc 731 ngày, tùy thuộc vào liệu nó có đi qua năm nhuận hay không. Khi làm tròn đến một đơn vị lịch, trước tiên ta lấy ngày/giờ chính xác được biểu diễn bởi relativeTo + duration, sau đó làm tròn xuống và lên theo smallestUnit và roundingIncrement để lấy hai ứng viên. Sau đó, ta chọn ứng viên theo cài đặt roundingMode, và cuối cùng trừ relativeTo để lấy duration cuối cùng.
Ví dụ
>Làm tròn bỏ đơn vị nhỏ
const duration = Temporal.Duration.from({ hours: 1, minutes: 30, seconds: 15 });
const roundedDuration = duration.round("minutes");
console.log(roundedDuration.toString()); // "PT1H30M"
Tránh các đơn vị lớn hơn
const duration = Temporal.Duration.from({
days: 3,
hours: 1,
minutes: 41,
seconds: 5,
});
const roundedDuration = duration.round({ largestUnit: "hours" });
console.log(
`Time spent on this problem: ${roundedDuration.toLocaleString("en-US", { style: "digital" })}`,
);
// Time spent on this problem: 73:41:05
Làm tròn đến số giờ nguyên
const duration = Temporal.Duration.from({ days: 1, hours: 1, minutes: 30 });
const roundedDuration = duration.round({
largestUnit: "hours",
smallestUnit: "hours",
roundingMode: "floor",
});
console.log(roundedDuration.hours); // 25
Làm tròn theo bước 15 phút
const duration = Temporal.Duration.from({ hours: 1, minutes: 17 });
const roundedDuration = duration.round({
smallestUnit: "minutes",
roundingIncrement: 15,
});
console.log(
`The queue will take approximately ${roundedDuration.toLocaleString("en-US")}`,
);
// The queue will take approximately 1 hr, 15 min
Giải quyết calendar duration
Nếu duration ban đầu hoặc đơn vị lớn nhất/nhỏ nhất chứa đơn vị lịch, bạn phải cung cấp tùy chọn relativeTo để giải quyết calendar duration.
const duration = Temporal.Duration.from({ months: 1, days: 1, hours: 1 });
const roundedDuration = duration.round({
largestUnit: "days",
smallestUnit: "days",
relativeTo: Temporal.PlainDateTime.from("2022-01-01"),
});
console.log(roundedDuration); // "P32D"
Đặc tả
| Thông số kỹ thuật |
|---|
| Temporal> # sec-temporal.duration.prototype.round> |