37

不要忽略“日期和时间”部分。

4

8 回答 8

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

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

于 2010-04-21T14:42:17.620 回答
41

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

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))
于 2012-08-16T21:43:46.277 回答
10

使用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)
于 2015-11-17T01:03:41.953 回答
5

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

于 2010-04-21T14:39:28.530 回答
2

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

于 2010-04-21T14:35:51.657 回答
1

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

mid_date.ish(:offset => 60.days)
于 2013-08-01T16:03:07.283 回答
1
Time.at(rand(Time.parse('some date').to_i..Time.now.to_i))
于 2016-07-27T18:04:13.707 回答
0

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

于 2010-04-21T14:37:59.293 回答