nodejs 中 UTC 时间戳转化的问题?

作者站长头像
站长
· 阅读数 7

各位好,koa/nodejs 中获取 UTC 时间,并转化为时间戳,我通过下面的代码实现的

const UTC = new Date().toUTCString();
console.log(UTC);
const UTCtimestamp = Date.parse(UTC);
console.log(UTCtimestamp);

现在的问题是,能够正确的打印出 UTC 即 UTC0 的时间,但在转化成时间戳后,却变成了本地时间的时间戳。

比如 UTC 是 Wed, 24 Jan 2024 06:02:07 GMT但转化后的时间戳却是 1706076127000

自动 +8 了,请问该怎么不自动转化,而是显示 UTC0 本身的时间戳?

回复
1个回答
avatar
test
2024-06-23

别把自己搞晕了,正因为 toUTCString 的返回结果里面的 GMT 标识存在,你获取的到的已经是 UTC 时间戳了。

answer image

只是你在在打印的时候,默认调取了你当前所在的时区,所以显示成了 +8 的让你感到疑惑。

以你的例子来说,如果你去掉了 Wed, 24 Jan 2024 06:02:07 GMT 里面的 GMT ,改为 Wed, 24 Jan 2024 06:02:07,你就会发现,他是按照你当前时区格式化获取出来的时间戳了,这才有问题。

时间戳记录了的是从 UTC 0 的 1970年1月1日0时0分0秒 到当前的秒(毫秒),换成国内的时区,就是从 1970年1月1日08时0分0秒 开始的了。

所以你在真实时区 +8 和 +0 上获取的同一时间的时间戳都是一样的。

只是在 +8 时区上,想要处理一个 +0 时区的字符串时,需要注意,因为有可能这个字符串被当成当前时区的处理的。换句话说,你在 +0 时区的 2024/01/01 00:00:00 是等于 +8 时区的 2024/01/01 08:00:00 的。但是你在 +0 时区的 2024/01/01 00:00:00 可不等于 +8 时区的 2024/01/01 00:00:00。

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容