Date.now()返回的值以微秒为单位,而不是毫秒

时间:2019-04-07 11:48:39

标签: javascript browser

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

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

但是,在所有三种浏览器(Chrome 73,Firefox 66.0.2和Edge 17.17134)中,Date.now()返回的值都是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
  ...
}

2 个答案:

答案 0 :(得分:4)

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

Date.now()返回纪元时间,以毫秒为单位,因此您需要

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

答案 1 :(得分:0)

在撰写本文时,自UNIX时代大约为1 554 637 931以来的时间以秒为单位。因此,以毫秒为单位的时间(JavaScript时间)约为1 554 637 931 654

距离纪元已过去1.55毫秒。实际上,您的JavaScript时间戳是毫秒。