Temporal.Duration.prototype.with()
with() 方法是 Temporal.Duration 实例上的一个方法,它会返回一个新的 Temporal.Duration 对象,该对象代表当前时长,并用新值替换其中的某些字段。由于所有 Temporal 对象都设计为不可变的,因此此方法实际上充当了时长字段的设置器。
语法
js
with(info)
参数
info-
一个包含
Temporal.Duration.from()所识别的属性中至少一个的对象:years、months、weeks、days、hours、minutes、seconds、milliseconds、microseconds、nanoseconds。未指定的属性将沿用原始时长的值。
返回值
一个新的 Temporal.Duration 对象,其中 info 对象中指定的、非 undefined 的字段将被相应值替换,其余字段将从原始时长复制。
异常
RangeError-
在以下情况之一中抛出
info对象中任何可识别的属性不是整数(包括非有限值)。- 日历单位(年、月、周)的绝对值 ≥ 232。
- 持续时间的非日历部分(天及以下),以秒为单位表示时,其绝对值 ≥ 253。
TypeError-
在以下情况之一中抛出
info对象不是一个对象。info对象中所有可识别的属性都为undefined。
示例
使用 with()
您可以使用 with() 来对 Temporal.Duration 对象的字段进行精细控制。例如,您可以手动 平衡 时长,只在一个单位上进行,这是 round() 方法无法提供的。
js
function balanceMinutes(duration) {
const { hours, minutes } = duration;
const totalMinutes = hours * 60 + minutes;
const balancedMinutes = totalMinutes % 60;
const balancedHours = (totalMinutes - balancedMinutes) / 60;
return duration.with({ hours: balancedHours, minutes: balancedMinutes });
}
const d1 = Temporal.Duration.from({ hours: 100, minutes: 100, seconds: 100 });
const d2 = balanceMinutes(d1);
console.log(d2.hours); // 101
console.log(d2.minutes); // 40
console.log(d2.seconds); // 100; remains unbalanced
规范
| 规范 |
|---|
| Temporal # sec-temporal.duration.prototype.with |
浏览器兼容性
加载中…