如何调整Temporal ZonedDateTime只读属性?及Temporal.now时间调整方法
JavaScript Temporal Polyfill 相关问题解答
1. 如何调整Temporal ZonedDateTime的只读属性?
Temporal的ZonedDateTime是不可变对象,所有实例属性均为只读,无法直接修改。要调整属性,必须通过它提供的实例方法生成新的ZonedDateTime实例:
- 调整年、月、日、时等时间字段:使用
with()方法,传入包含目标字段的对象参数 - 调整时区:使用
withTimeZone()方法,传入目标时区标识符
示例代码:
// 现有ZonedDateTime实例 const now = Temporal.now.zonedDateTimeISO(); // 调整为2025年,生成新实例 const adjustedYear = now.with({ year: 2025 }); // 调整时区为America/New_York,生成新实例 const adjustedTimeZone = now.withTimeZone('America/New_York');
2. 如何将Temporal.now获取的时间调整为当日8点?
不需要手动提取所有属性重新创建实例,直接使用ZonedDateTime的with()方法即可,这是官方推荐的最优方案。该方法会自动处理夏令时切换等边缘场景,比手动拼接更可靠。
示例代码:
// 获取当前时间并调整为当日8点 const today8AM = Temporal.now.zonedDateTimeISO().with({ hour: 8 }); // 如果需要同时重置分、秒、毫秒为0,可以一起指定 const today8AMExact = Temporal.now.zonedDateTimeISO().with({ hour: 8, minute: 0, second: 0, millisecond: 0 });
内容的提问来源于stack exchange,提问作者Jason Hocker
相关产品推荐
相关产品推荐

