使时间与浏览器时区无关



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

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

这一行打印给定时间和日期的时间戳。
如果我更改时区"windows "日期和时间设置",上面一行的输出也会发生变化。我怎样才能使上面一行的输出恒定,而不管当前浏览器窗口的时区?

date . prototype . gettime()的文档说明:

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

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

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

最新更新