使时间独立于浏览器时区

问题描述

我正在使用以下代码在 chrome 浏览器的控制台中打印时间戳,

moment("2021-01-12 00:00:00").utc().utcOffset(-new Date().getTimezoneOffset()).format('x')

这一行打印给定时间和日期的时间戳。
如果我从“Windows 日期和时间设置”更改时区,则上述行的输出也会更改。 无论当前浏览器窗口的时区如何,如何使上述行的输出保持不变?

解决方法

Date.protoype.getTime() 的文档说明:

getTime() 方法返回自 Unix 纪元以来的毫秒数*。

* JavaScript 使用毫秒作为度量单位,而 Unix 时间以秒为单位。

getTime() 总是使用 UTC 时间表示。例如,一个时区的客户端浏览器,getTime() 将与任何其他时区的客户端浏览器相同。

因此,您从 Date 获得的时间戳始终是 UTC,时区信息取自主机环境 (OS)。

默认情况下,JavaScript(和 moment)将解析日期和时间,假设它们位于用户的本地时区,因此会受到 Windows 日期和时间设置更改的影响。

为了保持一致,您需要告诉 moment 将值解析为 UTC。

const timestamp = moment.utc("2021-01-12 00:00:00").format("x");
console.log(timestamp); // prints 1610409600000
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>

无论您在哪个时区,都应该将值 1610409600000 记录到控制台。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...