-2

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

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

我试过了:

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

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

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

4

4 回答 4

4

您需要使用从当前日期派生的数字作为随机数生成器的种子,例如今天的“20130927”。

于 2013-09-27T05:40:18.353 回答
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.
于 2013-09-27T05:53:10.857 回答
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
于 2013-09-27T14:31:21.253 回答
0

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

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

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

于 2013-09-27T05:41:03.220 回答