【问题标题】:JavaScript event timestamps not consistentJavaScript 事件时间戳不一致
【发布时间】:2013-08-12 22:02:14
【问题描述】:

我注意到,当我单击站点上的一个元素时,Firebug 在事件处理程序中将 e.timeStamp 报告为 9 位数字,例如 866523917,而当我单击另一个元素时,e.timeStamp 会在该处理程序中报告由 Firebug 作为 16 位数字,例如 1376344365954000。为什么不一样?

谢谢

【问题讨论】:

  • 你的意思是:当我点击?谁触发了这个事件?请提供一个现场演示来说明这一点或以其他方式详细说明该问题。
  • 听起来很有趣。 event.timeStamp 是创建事件的毫秒数(从纪元开始)。应该不会有这么大的区别。你能提供一个示例代码吗?
  • 这是一个演示 - jsfiddle.net/stevea/zTm9L/1。 1376344365954000 是正确的数字,因为它分解为 43 年。但是由于某种原因,上面的时间大约是 877246085。这些是毫秒,因为它每秒变化大约 1000,所以这个数字大约是 240 小时。
  • “上面那个”是什么意思?我只能在小提琴中看到一个按钮。

标签: javascript firefox


【解决方案1】:

作为defined in standard timeStamp 返回自纪元以来的毫秒数:

用于指定时间(相对于纪元的毫秒数) 创建事件的位置。由于某些系统可能无法 提供此信息 timeStamp 的值可能不可用 对于所有事件。不可用时,将返回值 0。

但是对于epoch没有严格的定义:

纪元时间的示例是系统启动时间或 0:0:0 UTC 1970 年 1 月 1 日。

一些事件使用第一个变体(系统启动),而其他事件使用自 1970 年以来的时间。因此存在差异。作为旁注,可能根本没有为某些事件提供timeStamp,那么它的值将是0

【讨论】:

  • 他在 Firefox 中获得了这两种类型的值。这个答案如何解释它?
【解决方案2】:

我认为问题出在 Firefox 上。我在 Safari 和 Chrome 上得到了更大的数字(13 位加 3 个零),我看到一些文章说 Firefox 有一个错误:http://bugs.jquery.com/ticket/10755。一篇文章建议它可能会报告自上次重新启动以来的时间。

我仍然不明白为什么 Firefox 会以一种方式报告一个中断而另一种方式报告另一个中断。出于我的目的,我将只使用 timestamp=Date.now() 而不是 e.timestamp。这似乎在任何中断时都是一致的。

【讨论】:

    【解决方案3】:

    代替event.timestamp,使用Date.now()

    【讨论】:

    • 我要补充一点,当然,这两者是完全不同的东西——前者试图提供实际事件触发时的时间戳,而另一个只是返回当时的时间戳now 电话。当然,您的沉默假设是正确的,在许多情况下,差异并不重要,但仍然如此。我们再次触及 Web 的黑暗时代,当时 API 的定义很糟糕。在任何地方都简单地使用一个 epoch 不会花费太多的权力,否则我们会打乱所有的时间戳,一直在添加和减去它们。
    猜你喜欢
    • 2012-10-30
    • 2015-03-31
    • 1970-01-01
    • 2020-11-17
    • 1970-01-01
    • 1970-01-01
    • 2017-12-17
    • 2013-12-05
    相关资源
    最近更新 更多