В качестве дополнения к @mc-nd «s answer
При использовании Rnd()
для генерации случайных чисел вы обязательно использовать Randomize
инициализацию генератора случайных чисел с помощью системного времени в качестве начального значения или это происходит.
Option Explicit
Function getRandomDate(startDate, endDate)
getRandomDate = DateAdd(_
"d" _
, Fix(DateDiff("d", startDate, endDate) * Rnd) _
, startDate _
)
End Function
Dim startDate, endDate
startDate = CDate("2016/03/10")
endDate = CDate("2017/09/30")
Dim i
For i = 0 To 10
WScript.Echo getRandomDate(startDate, endDate)
Next
первый выход:
15/04/2017
07/01/2017
02/02/2017
21/08/2016
28/08/2016
24/05/2017
17/03/2016
16/05/2017
16/06/2017
17/04/2017
04/04/2016
второй выход:
15/04/2017
07/01/2017
02/02/2017
21/08/2016
28/08/2016
24/05/2017
17/03/2016
16/05/2017
16/06/2017
17/04/2017
04/04/2016
Добавьте Randomize
заявление в код, чтобы увидеть разницу;
Option Explicit
Function getRandomDate(startDate, endDate)
getRandomDate = DateAdd(_
"d" _
, Fix(DateDiff("d", startDate, endDate) * Rnd) _
, startDate _
)
End Function
Dim startDate, endDate
startDate = CDate("2016/03/10")
endDate = CDate("2017/09/30")
Dim i
'Call the random number generator with the system time as the seed.
Call Randomize()
For i = 0 To 10
WScript.Echo getRandomDate(startDate, endDate)
Next
первого выхода:
14/11/2016
28/09/2016
26/05/2016
06/01/2017
22/09/2016
13/06/2016
12/11/2016
05/03/2017
05/05/2016
01/05/2016
03/02/2017
второй выход:
08/03/2017
20/01/2017
18/04/2016
29/11/2016
16/08/2016
07/05/2016
06/10/2016
27/01/2017
22/07/2016
19/07/2016
21/09/2017
Это легкая вещь, чтобы пропустить, но есть большая разница.
Без ['Randomize'] (https://msdn.microsoft.com/en-us/library/38d7ckek (v = vs.84) .aspx) семя не будет действительно случайным - из [Функция Rnd] (https://msdn.microsoft.com/en-us/library/e566zd96(v=vs.84).aspx) - * «Перед вызовом Rnd используйте оператор Randomize без аргумента для инициализации генератора случайных чисел с помощью семя, основанное на системном таймере ». * – Lankymart
@ Lankymart, я знаю, спасибо. Теперь включено. Поскольку исходный код включил его, я решил опубликовать минимальный минимум, чтобы продемонстрировать использование, но, вероятно, я должен был включить его. –
Я бы сохранил 'Randomize' внутри' getRandomDate() 'так, чтобы он был самодостаточным и с меньшей вероятностью пропустил при вызове' getRandomDate() 'в будущем. – Lankymart