【问题标题】:Javascript timestamp number is not uniqueJavascript时间戳编号不是唯一的
【发布时间】:2013-12-05 21:34:34
【问题描述】:

我需要生成一个唯一编号以在我的代码中使用。我使用

var id = new Date().valueOf()

我知道上面返回的毫秒数。 但值不是唯一的。例如:1385035174752。这个数字会生成两次或更多次。

我的问题是为什么它不是唯一的?以及如何从当前日期/时间获取唯一编号?

【问题讨论】:

  • 您是否在两次尝试生成数字之间等待了超过一毫秒?此外,在 Chrome 中不可复制。您使用的是哪个浏览器? (它是valueOf(),注意大写的O。)
  • 如果您想创建一个唯一标识符,也许stackoverflow.com/questions/105034/… 可能会有所帮助?
  • 如果您需要唯一编号 - 尝试使用全局计数器,每次调用后递增。这样可以避免上述问题并减少 javascript
  • @David Thomas No.In那种情况下我应该使用其他方法来生成唯一的?.Chrome浏览器

标签: javascript timestamp


【解决方案1】:

在 Windows 上,计时器的分辨率约为 10.5 毫秒。因此,即使在几毫秒后,您也有机会获得相同的值。当然有更好的计时器,但 AFAIK 它们不适用于 JavaScript。

【讨论】:

    【解决方案2】:

    如果您需要唯一性,请使用 Math.random(),并且不要使用任何 Date() API。

    Math.random 返回一个介于 0 和 1 之间的整数。如果您真的想要一个基于当前时间的半唯一数字,您可以将 Date API 与 Math.random 结合使用. For example:

    var id = new Date().getTime() + Math.random();
    

    在现代浏览器中,您还可以使用performance.now()。该 API 保证每个新调用的返回值都是唯一的。

    【讨论】:

    • 我能从你上面说的方法生成的时间戳中取回时间吗?
    • @user2635299 是的。 new Date().getTime() 返回的值是一个整数(即无分数的数字),而Math.random() 的结果总是一个介于 0 和 1 之间的实数,不包括 1。因此,只需丢弃分数(例如使用 Math.floor())和那么你就有了可以用来再次构造Date对象的数字时间戳(使用Date's setTime method)。
    • @RobThanks.Accepted :)
    【解决方案3】:

    example.Even performance.now() 有时也不会给出唯一的数字。您必须制作自己的系统来生成它。像做一个计数器,每次访问时将其增加 1。

    【讨论】:

      猜你喜欢
      • 2012-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-16
      • 1970-01-01
      • 2011-08-02
      相关资源
      最近更新 更多