如何在两个日期之间生成随机日期和时间?

时间:2010-04-21 14:34:02

标签: ruby-on-rails ruby datetime random-time-generation

不要忽视'日期和时间'部分。

8 个答案:

答案 0 :(得分:60)

Time.at((date2.to_f - date1.to_f)*rand + date1.to_f)

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

答案 1 :(得分:35)

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

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))

答案 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)

答案 3 :(得分:4)

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

答案 4 :(得分:2)

我不知道ruby但是你为什么不生成一个整数并将它与时间戳一起使用?然后只需将时间戳转换为您想要的格式。

答案 5 :(得分:1)

如果您知道中点两侧的中点和偏移范围,您可以使用我的ish gem:https://github.com/spilliton/ish

mid_date.ish(:offset => 60.days)

答案 6 :(得分:1)

Time.at(rand(Time.parse('some date').to_i..Time.now.to_i))

答案 7 :(得分:0)

计算两个日期之间的分钟差异,生成0到该数字之间的随机数,并将该分钟数添加到第一个日期。