【问题标题】:Date.now() returns a value in microseconds and not in millisecondsDate.now() 以微秒而不是毫秒为单位返回一个值
【发布时间】:2019-04-07 11:48:39
【问题描述】:

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
  ...
}

【问题讨论】:

  • 这是什么 JavaScript 实现?
  • @ChaosPandion 它报告了我正在测试的 3 种浏览器的价值——Firefox、Chrome 和 Edge。我已经用版本号更新了问题。
  • This value is actually in milliseconds. 不,这是几秒钟,根据您关心的任何有关 unix 时间戳的文档...I infer it is the number of microseconds 您推断错误...自 1970 年以来一直存在1554637694364ms跨度>
  • 简单的手工计算显示1554637694364ms大约是49年。听起来不错。
  • 准确地说是 49.26349577800594 年 @mbojko:p

标签: javascript browser


【解决方案1】:

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

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

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

【讨论】:

  • 感谢您消除困惑。随着时间的流逝,这可能是我混淆的一件小事。再过几分钟,我就可以标记你的答案了。
【解决方案2】:

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

自纪元以来已经过去了大约 1.55 千兆秒。实际上,您的 JavaScript 时间戳是毫秒。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-02
    • 2018-01-30
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    • 2019-02-24
    • 2012-03-26
    • 1970-01-01
    相关资源
    最近更新 更多