Evg*_*nev 61

Time.at((date2.to_f - date1.to_f)*rand + date1.to_f)
Run Code Online (Sandbox Code Playgroud)

您将获得两个给定日期时间之间的时间对象.

  • 这是一个很好的解决方案,但是注意事项可能是有序的; 你需要将你的日期转换为一个时间,以便在它上面调用`to_f`.`Date`没有`to_f`.即`Date.today.to_time` (9认同)
  • 对我来说,现在至少,在1.9.3中,我可以做`date1 +(date2 - date1)*rand`,它出来的时间. (2认同)
  • 或者更简单:`rand((DateTime.now - 3.months)..DateTime.now)` (2认同)

Jac*_*Chu 36

您应该能够在一定范围内生成随机日期/时间.

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)
Run Code Online (Sandbox Code Playgroud)

您的输入需要是Time类,或者转换为一个类.

你也可以在纪元时间做一段时间然后再使用Time#at.

now = Time.now.to_i
minute_ago = (Time.now - 60).to_i
Time.at(rand(minute_ago..now))
Run Code Online (Sandbox Code Playgroud)

  • 在我看来,这个解决方案比 Evgeny 目前接受的解决方案要好得多。 (2认同)

小智 8

使用该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)
Run Code Online (Sandbox Code Playgroud)


Fed*_*oca 5

使用time.to_i()(请参阅类Time)将日期转换为整数,在这两个值之间随机化,然后使用转换为时间和日期Time.at()