使用Temporal.Duration时如何忽略闰年的影响?
如何忽略闰年影响计算Temporal时长的总秒数?
你当前用Temporal计算年转秒时,因为基准时间涉及闰年(比如2024年),导致多年时长的总秒数包含了闰日的额外86400秒。要得到理论化的平年结果,可以用以下两种方法:
方法一:直接使用固定平年秒数计算
如果你的时长仅包含年(比如P2Y),直接用平年的固定秒数(31536000秒/年)乘以年数即可:
const secondsPerYear = 31536000; // 平年365天 × 24小时 × 60分钟 × 60秒 // 计算P2Y的总秒数 const duration = Temporal.Duration.from("P2Y"); const totalSeconds = duration.years * secondsPerYear; // 63072000
方法二:指定固定平年作为计算基准
如果你的时长包含年、月、日等复合单位,通过指定一个非闰年的基准时间,让Temporal基于平年日历计算总秒数:
// 固定选择一个平年的日期作为计算基准(比如2023年1月1日) const nonLeapBase = Temporal.ZonedDateTime.from('2023-01-01T00:00:00[Europe/London]'); // 计算1年的秒数,结果为31536000 Temporal.Duration.from("P1Y").total({ relativeTo: nonLeapBase, unit: "seconds" }); // 计算2年的秒数,结果为63072000(无闰日额外秒数) Temporal.Duration.from("P2Y").total({ relativeTo: nonLeapBase, unit: "seconds" });
原理说明:Temporal的total()方法会根据relativeTo参数对应的实际日历计算时长,固定用平年基准后,所有年数都会按365天换算,自然不会包含闰年的额外一天。
内容的提问来源于stack exchange,提问作者John Winston
相关产品推荐
相关产品推荐

