【问题标题】:Random number in JavaScript per day onceJavaScript中的随机数每天一次
【发布时间】:2013-09-27 05:36:47
【问题描述】:

我正在编写执行以下操作的应用程序:

  1. 生成一个 4 位随机数。
  2. 每个日历日更改一次。
  3. 不会改变那一整天。一天只有一次。

我试过了:

function my_doubt()
 {
   var place = document.getElementById("my_div")
   place.innerHTML=Math.floor((Math.random()*100)+1);
 }

我得到一个带有Math.random() 的随机数。但是,我对如何为每天生成不同的数字一无所知。解决此问题的常用方法有哪些?

注意:它不一定是真的随机的。一个伪随机数也可以。

【问题讨论】:

  • 你有没有尝试过?有示例代码吗?
  • 当然有可能。
  • 当服务器端解决方案(使用任何服务器端语言)更健壮、更容易实现时,为什么要在客户端呢?
  • 我想要一辆法拉利 F40。 1. 一定是黄色的 2...谢谢:))
  • KarSho:my 否决票和近距离投票的原因是因为您没有表现出自己解决问题的尝试,您没有充分概述你的要求(特别是你没有费心在 cmets 中回答 Thilo 的问题,尽管已经看到了),你通过格式化你的要求 as 代码来“伪造”代码(可能是偶然的)(它们是真的不是),并花时间提出购物清单,而不是编程问题。

标签: javascript random


【解决方案1】:

您需要使用从当前日期派生的数字seed the random number generator,例如今天的“20130927”。

【讨论】:

    【解决方案2】:

    你还不清楚你的要求,所以我不知道你需要多随机(你对你需要的分布的均匀度有要求吗?)。

    这将生成一个随机的 4 位数字,这可能足以满足您的要求,但如果您执行分析,您会发现该数字实际上并不是非常随机:

    function rand_from_seed(x, iterations){
      iterations = iterations || 100;
      for(var i = 0; i < iterations; i++)
        x = (x ^ (x << 1) ^ (x >> 1)) % 10000;
      return x;
    }
    
    var random = rand_from_seed(~~((new Date)/86400000)); // Seed with the epoch day.
    

    【讨论】:

      【解决方案3】:

      1)在javascript中创建一个随机数

      2)存储在一天后过期的cookie中

      3)从cookie中获取值,如果它不存在转到1

      【讨论】:

      • 不能在不同的机器上工作(但不确定这是否是必需的)。
      【解决方案4】:

      现在您的问题更合理、更清晰、语气更优美。我可以为您提供一种在客户端获得相同结果的方法。然而,正如其他人提到的,为了保持一致性,您可能希望在服务器上保持数字以确保一致性。

      var oneDayInMs = 1000*60*60*24;
      var currentTimeInMs = new Date().getTime();  // UTC time
      var timeInDays = Math.floor(currentTimeInMs / oneDayInMs);
      var numberForToday = timeInDays % 9999;
      console.log(numberForToday);
      // zero-filling of numbers less than four digits might be optional for you
      // zero-filled value will be a string to maintain its leading 0s
      var fourDigitNumber = numberForToday.toString();
      while(fourDigitNumber.length < 4)
      {
        fourDigitNumber = 0+fourDigitNumber;
      }
      console.log(fourDigitNumber);
      
      // remember that this number rotates every and is unique for 10000 days
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-16
        • 2013-05-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多