Temporal.ZonedDateTime.prototype.round()
Temporal.ZonedDateTime
实例的 round()
方法返回一个新的 Temporal.ZonedDateTime
对象,表示此日期-时间按照给定单位进行四舍五入后的结果。
语法
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
的小数部分将根据roundingIncrement
和roundingMode
设置进行四舍五入。
返回值
一个新的 Temporal.ZonedDateTime
对象,表示此日期-时间按照给定单位四舍五入后的结果,其中所有小于 smallestUnit
的单位都归零。
如果 smallestUnit
是 "day"
,则返回的日期-时间将是此日期或次日的一天开始,具体取决于 roundingMode
以及与这两个时刻的距离。否则,舍入首先在其 PlainDateTime
上执行(与 Temporal.PlainDateTime.prototype.round()
相同),然后以相同的时区重新解释,使用 disambiguation: "compatible", offset: "prefer"
。参见从本地时间到 UTC 时间的模糊性和间隔以及偏移量模糊性。
异常
RangeError
-
如果任何选项无效,则抛出。
示例
小单位的四舍五入
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"
来解决。这是一个快速示例:
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 |
浏览器兼容性
加载中…