Случайное число в JavaScript в день один раз

Я занимаюсь кодированием приложения, которое выполняет следующие действия:

  1. Производит случайное число с 4 цифрами.
  2. Изменяет его один раз за календарный день.
  3. Не изменится этот полный день. Только один раз в день.

Я пытался:

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

Я получаю случайное число с Math.random(). Тем не менее, я довольно не знаю, как генерировать другое число за каждый день. Каковы некоторые общие подходы к решению этой проблемы?

Примечание. Это не обязательно быть случайным. Псевдослучайное число также ОК.

4 ответа

Вам нужно засеять генератор случайных чисел числом, полученным с текущей даты, например "20130927" на сегодняшний день.


Вы не совсем поняли свои требования, поэтому я не знаю, насколько вам это необходимо (у вас есть требования к тому, как вам нужна форма распределения?).

Это создаст случайный 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.


Теперь, когда ваш вопрос немного более разумный, ясный и приятный в тон. Я могу дать вам способ получить тот же результат на стороне клиента. Однако, как упоминалось выше, для поддержания согласованности вы, вероятно, хотите сохранить номер на сервере, чтобы обеспечить согласованность.

var ********** = 1000*60*60*24;
var currentTimeInMs = new Date().getTime(); // UTC time
var timeInDays = Math.floor(currentTimeInMs / **********);
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


1) создать случайное число в javascript

2) хранить в cookie, срок действия которого истекает через один день

3) получить значение из файла cookie, если он не существует goto 1

licensed under cc by-sa 3.0 with attribution.