getDate () возвращается накануне, но все кажется правильным

Самый эффективный, основной способ иметь неповторяющиеся случайные числа объясняется этим псевдокодом. Нет необходимости иметь вложенные циклы или хешированные запросы:

// get 5 unique random numbers, possible values 0 - 19
// (assume desired number of selections < number of choices)

const int POOL_SIZE = 20;
const int VAL_COUNT = 5;

declare Array mapping[POOL_SIZE];
declare Array results[VAL_COUNT];

declare i int;
declare r int;
declare max_rand int;

// create mapping array
for (i=0; i<POOL_SIZE; i++) {
   mapping[i] = i;
}

max_rand = POOL_SIZE-1;  // start loop searching for maximum value (19)

for (i=0; i<VAL_COUNT; i++) {
    r = Random(0, max_rand); // get random number
    results[i] = mapping[r]; // grab number from map array
    mapping[r] = max_rand;  // place item past range at selected location

    max_rand = max_rand - 1;  // reduce random scope by 1
}

Предположим, что первая итерация генерирует случайное число 3 для начала (от 0 до 19). Это сделало бы результаты [0] = сопоставление [3], т. Е. Значение 3. Затем мы присвоили отображение [3] равным 19.

На следующей итерации случайное число было 5 (из 0-18). Это дало бы результаты [1] = mapping [5], т. Е. Значение 5. Затем мы назначили отображение [5] на 18.

Теперь предположим, что следующая итерация снова выбрала 3 (из 0 - 17). результатам [2] присваивается значение отображения [3], но теперь это значение не равно 3, но 19.

Эта же защита сохраняется для всех чисел, даже если у вас есть тот же номер 5 раз подряд. Например, если генератор случайных чисел дал вам 0 пять раз подряд, результаты будут следующими: [0, 19, 18, 17, 16].

Вы никогда не получите одинаковый номер дважды.

0
задан Robert Ochinski 17 January 2019 в 17:04
поделиться

2 ответа

Я не вижу здесь ничего плохого (пример взят из mozilla getDate(), ссылка , возможно, вам нужно проверить запись

var endDate = new Date('August 19, 1975 23:15:30');

console.log(endDate.getFullYear());
console.log(endDate.getMonth()+1); // 1 - 12 range
console.log(endDate.getDate());
]

0
ответ дан nazimboudeffa 17 January 2019 в 17:04
поделиться

Вот что происходит. Когда вы создаете объект Date, вы получаете дату UTC. В вашем случае вы получите 17.01.2009 в 00.00 UTC. Я полагаю, что вы находитесь в США, поэтому эта дата будет для вас 01/16.

var utcDate = new Date('2019-01-17T00:00:00.000Z');
console.log(utcDate);
console.log(utcDate.getDate()); // 16

Если вместо этого вы создадите дату с правильным часовым поясом, вы получите ожидаемую дату. Вот пример для Тихоокеанского времени (UTC-8).

var myDate = new Date('2019-01-17T00:00:00.000-08:00');
console.log(myDate);
console.log(myDate.getDate()); // 17

0
ответ дан Aioros 17 January 2019 в 17:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: