JavaScript中的随机数每天一次

JavaScript中的随机数每天一次,javascript,random,Javascript,Random,我正在编写一个执行以下操作的应用程序: 生成一个4位数的随机数 每个日历日更改一次 不会改变那一整天。一天只有一次 我试过: function my_doubt() { var place = document.getElementById("my_div") place.innerHTML=Math.floor((Math.random()*100)+1); } 我用Math.random()得到一个随机数。然而,我对如何为每天生成不同的数字一无所知。解决这个问题的常用方法有

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

  • 生成一个4位数的随机数
  • 每个日历日更改一次
  • 不会改变那一整天。一天只有一次
  • 我试过:

    function my_doubt()
     {
       var place = document.getElementById("my_div")
       place.innerHTML=Math.floor((Math.random()*100)+1);
     }
    
    我用
    Math.random()
    得到一个随机数。然而,我对如何为每天生成不同的数字一无所知。解决这个问题的常用方法有哪些

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

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

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

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


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

    您还不清楚自己的需求,因此我不知道您需要的随机性(您是否需要一个统一的分布?)

    这将生成一个看似随机的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.
    
    函数rand\u from\u seed(x,迭代次数){
    迭代次数=迭代次数| | 100;
    对于(var i=0;i1))%10000;
    返回x;
    }
    var random=rand_from_seed(~(新日期)/86400000));//与大纪元一起播种。
    
    现在你的问题更合理、更清晰、语气更优美了。我可以为您提供一种在客户端获得相同结果的方法。但是,正如其他人所提到的,为了保持一致性,您可能需要维护服务器上的号码以确保一致性

    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
    
    var oneDayInMs=1000*60*60*24;
    var currentTimeInMs=new Date().getTime();//UTC时间
    var timeInDays=数学楼层(currentTimeInMs/oneDayInMs);
    var numberForToday=timeInDays%9999;
    控制台日志(编号为fortoday);
    //小于四位数的数字的零填充可能是可选的
    //零填充值将是一个字符串,以保持其前导0
    var fourDigitNumber=numberForToday.toString();
    while(fourDigitNumber.length<4)
    {
    fourDigitNumber=0+fourDigitNumber;
    }
    console.log(四位数);
    //请记住,此数字每隔一天旋转一次,并且在10000天内是唯一的
    
    您试过什么吗?你有任何示例代码吗?当然有可能。当服务器端解决方案(使用任何服务器端语言)更健壮、更易于实现时,为什么要在客户端执行此操作?我想要一辆法拉利F40。1.它一定是黄色的2。。。谢谢:)卡尔肖:我投反对票和反对票的原因是,你没有亲自尝试解决问题,没有充分说明你的要求(特别是你没有费心在评论中回答蒂洛的问题,尽管你已经看到了),你“伪造”了代码(可能是偶然的)通过将您的需求格式化为代码(它们实际上不是),并花时间显示一个购物清单,而不是一个编程问题。不会在不同的机器上工作(但不确定这是否是一个需求)。