每天JavaScript中的随机数一次

时间:2013-09-27 05:36:47

标签: javascript random

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

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

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

    我正在使用Math.random()获得随机数。但是,我对如何为每天生成不同的数字毫无头绪。解决这个问题的常用方法有哪些?

    注意:它不必是真正随机。伪随机数也可以。

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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.

答案 2 :(得分:0)

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

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

3)从cookie获取值,如果它不存在goto 1

答案 3 :(得分:0)

现在你的问题更合理,更清晰,更好。我可以给你一个在客户端获得相同结果的方法。但是,正如其他人所提到的,为了保持一致性,您可能希望在服务器上保留数字以确保一致性。

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