You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在不使用魔法数的情况下为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 09:51:55