首页 > 解决方案 > Date.now() 以微秒而不是毫秒为单位返回一个值

问题描述

Date.now(),根据文档应该返回 Unix 时间戳或纪元时间,即自 1970 年 1 月 1 日以来经过的毫秒数。

根据本网站(或任何其他有效计算方式)的当前 unix 时间戳约为 1554637184。请注意,此值中有 10 位数字。这个值实际上是以毫秒为单位的。

但是,Date.now()Chrome 73、Firefox 66.0.2 和 Edge 17.17134 这三种浏览器返回的值是 1554637694364,观察到它是 13 位数字,因此,我推断它是微秒数自 1970 年 1 月 1 日起失效。

这是怎么回事?

经过多年的使用,我才意识到这一点,因为刚才我正在调试一些代码,这些代码进行了这样的检查,结果失败了:

let endTime = ...; // a time later than now expressed as a unix timestamp
let now = Date.now();

if (endTime <= now) {
  // And it always came here, and that led me to this discovery
  ...
}

标签: javascriptbrowser

解决方案


当前纪元时间(又名 unix 时间戳)1554637856是自 1970 年 1 月 1 日以来的秒数,而不是毫秒。

Date.now()返回以毫秒为单位的纪元时间,所以你想要

if (endTime <= now / 1000) {
...

推荐阅读