web-dev-qa-db-ja.com

2つの日付の間にランダムな日付と時刻を生成するにはどうすればよいですか?

ただし、「日付と時刻」の部分を見落とさないでください。

35
Hermine D.
Time.at((date2.to_f - date1.to_f)*Rand + date1.to_f)

指定された2つの日時の間にある時間オブジェクトを取得します。

61

特定の範囲内でランダムな日付/時刻を生成できるはずです。

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クラスであるか、1つに変換する必要があります。

エポック時間で一定範囲の時間を実行してから、Time#atを使用することもできます。

now = Time.now.to_i
minute_ago = (Time.now - 60).to_i
Time.at(Rand(minute_ago..now))
37
Jack Chu

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

time.to_i()(クラスTimeを参照)を使用して日付を整数に変換し、これら2つの値の間でランダム化してから、Time.at()で時刻と日付に再変換します。

Rubyについてはわかりませんが、整数を生成してタイムスタンプと一緒に使用してみませんか?次に、タイムスタンプを目的の形式に変換するだけです。

2
Max Leske
Time.at(Rand(Time.parse('some date').to_i..Time.now.to_i))
1
alebian

中点と中点の両側のオフセット範囲がわかっている場合は、私のish gemを使用できます: https://github.com/spilliton/ish

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

たとえば、2つの日付の分数の差を計算し、0とその数の間の乱数を生成し、その分数を最初の日付に追加します。

0
Maarten Ureel