如何在不使用魔法数的情况下为Temporal.Instant增加1天?
Temporal.Instant 增加一天作为 JWT exp 值的最佳实现方式
我尝试用 Temporal.Instant 计算当前时间加一天后的纪元秒数,作为 JWT 的 exp 字段值,最直观的写法是:
Temporal.Now.instant().add({ days: 1 }).epochSeconds
但运行时会抛出错误:
Uncaught RangeError: Duration field days not supported by Temporal.Instant. Try Temporal.ZonedDateTime instead.
这是因为 Temporal.Instant 不包含日历信息,“1天”的时长可能受夏令时、闰秒等因素影响,无法直接和 Instant 做运算。
最直接的替代方案是用24小时来代替1天:
Temporal.Now.instant().add({ hours: 24 }).epochSeconds
这种方法可行,但存在魔法数 24 的问题,代码可读性和维护性不够好。
为了避免魔法数,我试过这种写法:
Temporal.Now.instant().add({ hours: Temporal.Duration.from({ days: 1 }).total({ unit: 'hours' }) }).epochSeconds
但这段代码过于冗长,可读性很差,而我真正需要的只是“当前时间一天后的纪元秒数”。
按照错误提示改用 ZonedDateTime 也不合适——时区信息和当前场景无关,而且我需要的是固定时长的未来时间,不想受夏令时等因素影响。
有没有更简洁、符合规范的实现方式,同时避免魔法数?还是只能妥协使用 hours: 24?
内容的提问来源于stack exchange,提问作者Lionel Rowe
相关产品推荐
相关产品推荐

