← 全部文章

技术与生活 / 一篇记录

同一时刻,为什么能显示成两个日期?

统一保存明确的时间点,再按用户时区展示,可减少跨地域歧义。

时间点、时区和显示格式是三个概念。保存带明确偏移或 UTC 的时间点,再按展示地区格式化,才能解释跨日和跨月时看到的日期变化。

从一个例子看起

以下示例可在现代浏览器的开发者工具中观察;涉及 DOM 的代码需要在网页环境运行。

console.log(new Date('2021-12-01T00:00:00Z').toISOString());

比较 UTC 格式与本地显示,确认它们表示同一时刻。

排查时再往前走一步

把同一时间点分别格式化成 UTC 与北京时间,确认只是显示改变。只表示生日或账期的日期则不一定适合转成 UTC 时间戳,应先定义业务语义。

展示日期时尽量使用明确的格式化接口,而不是手动截取字符串。需要按自然日统计时,还应先确定业务所在时区,再计算时间边界,不能把 UTC 日期直接当成本地日期。

缺少时区的日期字符串可能按不同规则解释。

参考:JavaScript 文档。

搜索文章

输入关键词,找回一篇记录。