Temporal.ZonedDateTime.prototype.round()

可用性有限

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

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

Temporal.ZonedDateTime 实例的 round() 方法返回一个新的 Temporal.ZonedDateTime 对象,表示此日期-时间按照给定单位进行四舍五入后的结果。

语法

js
round(smallestUnit)
round(options)

参数

smallestUnit(最小单位)

表示 smallestUnit 选项的字符串。这是一个便捷的重载,因此 round(smallestUnit) 等价于 round({ smallestUnit }),其中 smallestUnit 是一个字符串。

options

一个包含以下部分或全部属性的对象(按检索和验证的顺序):

roundingIncrement 可选

一个数字(截断为整数),表示给定 smallestUnit 中的舍入增量。默认为 1。对于 "day" 以外的所有 smallestUnit 值,增量必须是该单位最大值的约数;例如,如果单位是小时,增量必须是 24 的约数,并且不能是 24 本身,这意味着它可以是 1、2、3、4、6、8 或 12。对于 "day",增量必须是 1。

roundingMode 可选

一个字符串,指定如何对 smallestUnit 的小数部分进行四舍五入。参见 Intl.NumberFormat()。默认为 "halfExpand"

smallestUnit(最小单位)

一个字符串,表示输出中包含的最小单位。该值必须是以下之一:"day""hour""minute""second""millisecond""microsecond""nanosecond",或它们的复数形式。对于大于 "nanosecond" 的单位,smallestUnit 的小数部分将根据 roundingIncrementroundingMode 设置进行四舍五入。

返回值

一个新的 Temporal.ZonedDateTime 对象,表示此日期-时间按照给定单位四舍五入后的结果,其中所有小于 smallestUnit 的单位都归零。

如果 smallestUnit"day",则返回的日期-时间将是此日期或次日的一天开始,具体取决于 roundingMode 以及与这两个时刻的距离。否则,舍入首先在其 PlainDateTime 上执行(与 Temporal.PlainDateTime.prototype.round() 相同),然后以相同的时区重新解释,使用 disambiguation: "compatible", offset: "prefer"。参见从本地时间到 UTC 时间的模糊性和间隔以及偏移量模糊性

异常

RangeError

如果任何选项无效,则抛出。

示例

小单位的四舍五入

js
const zdt = Temporal.ZonedDateTime.from(
  "2021-07-01T12:34:56.123456789[America/New_York]",
);
const nearestMillisecond = zdt.round("millisecond");
console.log(nearestMillisecond.toString()); // 2021-07-01T12:34:56.123-04:00[America/New_York]

const nearestHalfHour = zdt.round({
  smallestUnit: "minute",
  roundingIncrement: 30,
});
console.log(nearestHalfHour.toString()); // 2021-07-01T12:30:00-04:00[America/New_York]

const nextDay = zdt.round({ smallestUnit: "day", roundingMode: "ceil" });
console.log(nextDay.toString()); // 2021-07-02T00:00:00-04:00[America/New_York]

四舍五入后的模糊性

四舍五入后的日期-时间在给定 timezone 中可能存在模糊性。模糊性总是使用 disambiguation: "compatible", offset: "prefer" 来解决。这是一个快速示例:

js
const zdt = Temporal.ZonedDateTime.from(
  "2024-03-10T01:00:00-05:00[America/New_York]",
);
const rounded = zdt.round({ smallestUnit: "hour", roundingIncrement: 2 });
// The result is supposed to be 2024-03-10T02:00:00-05:00[America/New_York],
// but this time does not exist. `disambiguation: "compatible"` tells us to move
// forward by 1 hour.
console.log(rounded.toString()); // 2024-03-10T03:00:00-04:00[America/New_York]

规范

规范
Temporal
# sec-temporal.zoneddatetime.prototype.round

浏览器兼容性

另见