使用faker gem生成日期

时间:2014-04-16 22:06:53

标签: ruby-on-rails date faker

我使用工厂女孩和faker来为rails应用程序生成数据。麻烦的是,faker的文档没有说出有关生成随机日期的任何信息。

这是我现有的代码。如您所见,我不确定如何在start_date之后继续。我该如何生成日期?

提前致谢:)

FactoryGirl.define do
  factory :registration_form do
    first_name   Faker::Name.first_name
    last_name    Faker::Name.last_name
    email        Faker::Internet.safe_email
    phone_number Faker::PhoneNumber.phone_number
    twitter      Faker::Internet.user_name
    skype        Faker::Internet.user_name
    start_date   Faker:: ???????????
  end
end

6 个答案:

答案 0 :(得分:3)

我会使用Faker::Number.number来改变相对于今天的日期。

e.g。

start_date  { Date.today - Faker::Number.number(3).to_i.days }

或者,如果您不想使用Faker,您可以生成随机的未来或过去日期:

rand(1.year).from_now
rand(1.year).ago

答案 1 :(得分:2)

Faker现在支持时间和日期。

不确定何时将其放入,但最新版本支持Times,如果需要,可以很容易地将其转换为Date。

以下是一些关键方法:

# Random date between dates
Faker::Time.between(2.days.ago, Time.now)             #=> "2014-09-18 12:30:59 -0700"

# Random date between dates (within specified part of the day)
Faker::Time.between(2.days.ago, Time.now, :all)       #=> "2014-09-19 07:03:30 -0700"
Faker::Time.between(2.days.ago, Time.now, :day)       #=> "2014-09-18 16:28:13 -0700"
Faker::Time.between(2.days.ago, Time.now, :night)     #=> "2014-09-20 19:39:38 -0700"
Faker::Time.between(2.days.ago, Time.now, :morning)   #=> "2014-09-19 08:07:52 -0700"
Faker::Time.between(2.days.ago, Time.now, :afternoon) #=> "2014-09-18 12:10:34 -0700"
Faker::Time.between(2.days.ago, Time.now, :evening)   #=> "2014-09-19 20:21:03 -0700"
Faker::Time.between(2.days.ago, Time.now, :midnight)  #=> "2014-09-20 00:40:14 -0700"

# Random time in the future (up to maximum of N days)
Faker::Time.forward(23, :morning)                     #=> "2014-09-26 06:54:47 -0700"

# Random time in the past (up to maximum of N days)
Faker::Time.backward(14, :evening)                    #=> "2014-09-17 19:56:33 -0700"

答案 2 :(得分:1)

使用信用卡到期日期:

Faker::Business.credit_card_expiry_date

答案 3 :(得分:0)

据我所知,faker gem确实有一个日期用途,那就是信用卡到期日。

根据使用情况,您只需在工厂中设置日期即可。这可能就像:

start_date Date.today + 7.days(1.week,1.month etc)

答案 4 :(得分:0)

而不是使用Faker,你可以通过使用

呈现随机日期
Time.at(0.0 + rand * (Time.now.to_f - 0.0.to_f)).to_date

AFAIK它更快,您可以在更多方面使用它。 如果你需要另一个范围而不是1970-01-01到今天,你也可以使用

   Time.at(Time.new(1990).to_f + rand * (Time.now.to_f - Time.new(1990).to_f)).to_date

答案 5 :(得分:0)

您可以生成如下所示的随机日期

  

Faker :: Date.between(2.days.ago,Date.today)#=>“ 2014年9月24日,星期三”

您可以在https://github.com/stympy/faker/blob/master/doc/default/date.md

中找到更多选项