Temporal.Duration.prototype.round()
Базовый уровень Ограниченная доступность
Эта функция не является базовой, поскольку она не работает в некоторых наиболее широко используемых браузерах.
Метод round() экземпляров Temporal.Duration возвращает новый объект Temporal.Duration с продолжительностью, округленной до заданной наименьшей единицы и/или сбалансированной до заданной наибольшей единицы.
Синтаксис
round(smallestUnit) round(options)
Параметры
-
smallestUnit - Строка, представляющая опцию
smallestUnit. Это удобная перегрузка, поэтомуround(smallestUnit)эквивалентноround({ smallestUnit }), гдеsmallestUnitявляется строкой. -
options - Объект, содержащий некоторые или все из следующих свойств (в порядке их извлечения и проверки):
-
largestUnitНеобязательно - Любая из темпоральных единиц:
"years","months","weeks","days","hours","minutes","seconds","milliseconds","microseconds","nanoseconds", или их формы единственного числа, или значение"auto", которое означает наибольший ненулевой компонент этой продолжительности илиsmallestUnit, в зависимости от того, что больше. По умолчанию используется"auto". Результат не будет содержать единиц, больших, чем эта; например, если наибольшая единица —"minutes", то "1 hour 30 minutes" станет "90 minutes". -
relativeToНеобязательно - Дата(время) с часовым поясом или без, которая предоставляет информацию о времени и календаре для разрешения календарных продолжительностей (см. ссылку для общего толкования этой опции). Требуется, если либо
this, либоotherявляется календарной продолжительностью, либоsmallestUnitявляется календарной единицей. -
roundingIncrementНеобязательно - Число (усеченное до целого), представляющее приращение округления в заданной
smallestUnit. По умолчанию используется1. Должно находиться в диапазоне от 1 до 1e9 включительно. Если наименьшая единица — часы, минуты, секунды, миллисекунды, микросекунды или наносекунды, приращение должно быть делителем максимального значения единицы; например, если единица — часы, приращение должно быть делителем 24 и не должно быть 24 само по себе, что означает, что оно может быть 1, 2, 3, 4, 6, 8 или 12. -
roundingModeНеобязательно - Строка, представляющая режим округления, указывающий округлять в большую или меньшую сторону в различных сценариях. См.
Intl.NumberFormat(). По умолчанию используется"halfExpand". -
smallestUnitНеобязательно - Любая из темпоральных единиц:
"years","months","weeks","days","hours","minutes","seconds","milliseconds","microseconds","nanoseconds", или их формы единственного числа. По умолчанию используется"nanoseconds". Для единиц, больших, чем"nanoseconds", дробные частиsmallestUnitбудут округлены в соответствии с настройкамиroundingIncrementиroundingMode. Должно быть меньше или равноlargestUnit. Должен быть предоставлен хотя бы один изsmallestUnitиlargestUnit.
-
Возвращаемое значение
Новый объект Temporal.Duration, где наибольшая единица не превышает опции largestUnit, а наименьшая единица не меньше опции smallestUnit. Дробные части smallestUnit округляются в соответствии с настройками roundingIncrement и roundingMode.
Исключения
-
RangeError - Выбрасывается, если какой-либо из параметров недействителен.
Описание
Метод round() выполняет две операции: округление и балансировку. Он делает следующее:
- Он гарантирует, что продолжительность сбалансирована. Если компонент превышает свой предпочтительный максимум (24 часа в сутки, 60 минут в час и т. д.), избыток переносится на следующую большую единицу, пока мы не достигнем
largestUnit. Например, "24 hours 90 minutes" становится "25 hours 30 minutes", еслиlargestUnit— это"auto", и "1 day 1 hour 30 minutes", еслиlargestUnit— это"days". - Для всех компонентов, больших, чем
largestUnit, они переносятся вниз вlargestUnit; например, "2 hours 30 minutes" становится "150 minutes", еслиlargestUnit— это"minutes". - Для всех компонентов, меньших, чем
smallestUnit, они переносятся вверх вsmallestUnitкак дробная часть, а затем округляются в соответствии с настройкамиroundingIncrementиroundingMode. Например, "1 hour 30 minutes" становится "1.5 hours", еслиsmallestUnit— это"hours", а затем округляется до "2 hours" с использованием настроек по умолчанию.
Календарные единицы имеют неравномерную длину. Их длина определяется относительно начальной точки. Например, продолжительность "2 years" в григорианском календаре может составлять 730 или 731 день, в зависимости от того, проходит ли она через високосный год. При округлении до календарной единицы мы сначала получаем точную дату и время, представленные relativeTo + duration, затем округляем их вниз и вверх в соответствии с smallestUnit и roundingIncrement, чтобы получить двух кандидатов. Затем мы выбираем кандидата в соответствии с настройкой roundingMode и, наконец, вычитаем relativeTo, чтобы получить окончательную продолжительность.
Примеры
Округление небольших единиц
const duration = Temporal.Duration.from({ hours: 1, minutes: 30, seconds: 15 });
const roundedDuration = duration.round("minutes");
console.log(roundedDuration.toString()); // "PT1H30M"
Избегание более крупных единиц
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
Округление до целого числа часов
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
Округление с приращением 15 минут
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
Разрешение календарных продолжительностей
Если либо начальная продолжительность, либо наибольшая/наименьшая единица содержит календарную единицу, вы должны предоставить опцию relativeTo для разрешения календарных продолжительностей.
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"
Спецификации
| Спецификация |
|---|
| Temporal # sec-temporal.duration.prototype.round |
Совместимость с браузерами
| Настольные | Мобильные | Серверные | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 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 | |
round |
144 |
144 |
139 |
128 |
preview |
144 |
139 |
95 |
Нет |
Нет |
144 |
Нет |
1.4.0 |
2.7 |
26.0.0 |
См. также
© 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/round