我需要生成一个随机日期,MM / DD / YYYY

时间:2011-05-10 19:12:30

标签: ruby

我需要生成一个随机日期。 我的计算时间不需要时间。 我想要使​​用的是:

def date_rand from = 0.0, to = Time.now
  Time.at(from + rand * (to.to_f - from.to_f))
end

这让我很接近,但还有其他一些我不需要的信息。 (时间,区域等) 如果有办法在没有所有其他数据的情况下获取日期,我将非常感谢您对此有所帮助。

3 个答案:

答案 0 :(得分:6)

在Ruby 1.9中,包括date库在#to_date类中添加Time方法(以及#to_datetime方法)。 Ruby 1.8也有它,但它是一种私有方法。

require 'date'
def date_rand(from = 0.0, to = Time.now)
  Time.at(from + rand * (to.to_f - from.to_f)).to_date
end

在Ruby 1.8中,你可以这样做:

def date_rand(from = 0.0, to = Time.now)
   time = Time.at(from + rand * (to.to_f - from.to_f))
   Date.civil(time.year, time.month, time.day)
end

答案 1 :(得分:2)

dmarkov的答案很好。你也可以用日期做同样的事情:

require 'date'
def date_rand(from = Date.new(1970,1,1), to = Date.today)
  low, high = from.ajd.to_i, to.ajd.to_i
  r = rand(high-low+1) + low
  Date.jd(r)
end

答案 2 :(得分:1)

来自Obie Fernandez的blog post

class Time
  def self.random(years_back=5)
    year = Time.now.year - rand(years_back) - 1
    month = rand(12) + 1
    day = rand(31) + 1
    Time.local(year, month, day)
  end
end

这允许您调用Time.random。我将此作为您问题的替代答案,并且取决于您计划如何使用它,请小心,因为猴子修补标准的lib类通常不是最好的方法来处理事情,如果其他人要去这些天必须调试/支持你的代码。