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 |
浏览器兼容性
加载中…