Как создать случайную дату и время между двумя датами? - PullRequest
33 голосов
/ 21 апреля 2010

Не упускайте из виду часть «дата и время».

Ответы [ 8 ]

60 голосов
/ 21 апреля 2010
Time.at((date2.to_f - date1.to_f)*rand + date1.to_f)

Вы получите объект времени, который находится между двумя указанными датами.

35 голосов
/ 17 августа 2012

Вы должны иметь возможность генерировать случайные дату / время в пределах определенного диапазона.

now = Time.now
a_day_ago = now - 60 * 60 * 24

random_time = rand(a_day_ago..now)

# with activesupport required
up_to_a_year_ago = rand(1.year.ago..Time.now)

Ваши входные данные должны быть класса Time или преобразованы в один класс.

Вы также можете сделать интервал времени в эпоху и затем использовать Time#at.

now = Time.now.to_i
minute_ago = (Time.now - 60).to_i
Time.at(rand(minute_ago..now))
8 голосов
/ 17 ноября 2015

Используйте метод rand().

require 'time'
t1 = Time.parse("2015-11-16 14:40:34")
t2 = Time.parse("2015-11-20 16:20:23")
puts rand(t1..t2)
4 голосов
/ 21 апреля 2010

Используйте time.to_i() (см. Класс Time), чтобы преобразовать даты в целое число, рандомизировать между этими двумя значениями, а затем снова преобразовать во время и дату с Time.at().

2 голосов
/ 21 апреля 2010

Я не знаю о ruby, но почему бы вам просто не сгенерировать целое число и не использовать его вместе с отметкой времени? Затем просто конвертируйте метку времени в желаемый формат.

1 голос
/ 27 июля 2016
Time.at(rand(Time.parse('some date').to_i..Time.now.to_i))
1 голос
/ 01 августа 2013

Если вы знаете среднюю точку и диапазон смещения по обе стороны от средней точки, вы можете использовать мой драгоценный камень: https://github.com/spilliton/ish

mid_date.ish(:offset => 60.days)
0 голосов
/ 21 апреля 2010

Рассчитайте разницу, например, в минутах между двумя датами, сгенерируйте случайное число от 0 до этого числа и добавьте это количество минут к первой дате.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...