2010-04-21 17 views

cevap

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

Belirtilen iki zaman arasında olan bir zaman nesnesi alırsınız.

+8

Bu büyük bir çözelti, ancak not sırada olabilir olduğu; Tarihinizi 'to_f' olarak adlandırmak için bir süreye dönüştürmeniz gerekir. 'Tarih'de' to_f' yoktur. i.e. 'Date.today.to_time' –

+0

+1 basit, noktaya, güzel. Çok teşekkürler. –

+0

Size başka bir tane vermenin bir yolunu bulmalıyım +1 - Bu hafta 2. kez bu cevaba başvurdum! –

2

Ruby hakkında bir bilgim yok ama neden sadece bir tamsayı oluşturmuyorsunuz ve zaman damgasıyla birlikte kullanmıyorsunuz? Ardından, zaman damgasını istediğiniz formata dönüştürün.

0

Örneğin, iki tarih arasındaki dakikadaki farkı hesaplayın, 0 ile bu sayı arasında rastgele bir sayı oluşturun ve ilk tarihe bu dakika sayısını ekleyin.

4

Tarihlerinizi tamsayıya dönüştürmek için (Time sınıfına bakın) kullanın, bu iki değer arasında rastgele seçim yapın, ardından Time.at() ile zamana ve tarihe dönüştürebilirsiniz.

29

Belirli bir aralıkta rastgele tarih/saat üretebilmeniz gerekir.

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) 

Kişisel girişler Time sınıfı olmak gerekir, ya da olsa birine dönüştürülür.

Ayrıca, zaman aralığında bir zaman aralığı yapabilir ve Time#at'u kullanabilirsiniz. Eğer orta noktayı ve sen benim imsi mücevher kullanabilirsiniz orta noktasının her iki tarafında kayma aralığını biliyorsanız

now = Time.now.to_i 
minute_ago = (Time.now - 60).to_i 
Time.at(rand(minute_ago..now)) 
+0

Bence bu çözüm, şu anda Evgeny tarafından kabul edilen modelden çok daha güzel. – severin

+1

Küçük bir açıklama olsa da: '1.year.ago' sadece * etkinken * çalışıyor * yüklenen * – severin

+0

İyi nokta @severin. Yüklü aktif destekli ve desteksiz kod desteği ekledim. Ayrıca, zaman aralığı aralıkları için bir örnek ekledi. –

4

rand() yöntemi kullanın.

require 'time' 
t1 = Time.parse("2015-11-16 14:40:34") 
t2 = Time.parse("2015-11-20 16:20:23") 
puts rand(t1..t2) 
0
Time.at(rand(Time.parse('some date').to_i..Time.now.to_i))