Temporal.Duration.prototype.with()

可用性有限

此特性不是基线特性,因为它在一些最广泛使用的浏览器中不起作用。

实验性: 这是一项实验性技术
在生产中使用此技术之前,请仔细检查浏览器兼容性表格

with() 方法是 Temporal.Duration 实例上的一个方法,它会返回一个新的 Temporal.Duration 对象,该对象代表当前时长,并用新值替换其中的某些字段。由于所有 Temporal 对象都设计为不可变的,因此此方法实际上充当了时长字段的设置器。

语法

js
with(info)

参数

info

一个包含 Temporal.Duration.from() 所识别的属性中至少一个的对象:yearsmonthsweeksdayshoursminutessecondsmillisecondsmicrosecondsnanoseconds。未指定的属性将沿用原始时长的值。

返回值

一个新的 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

浏览器兼容性

另见