我正在使用 Factory Girl 和 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
不确定他们何时将其放入,但最新版本支持时间,如果需要,您可以很容易地将其转换为日期。
以下是一些关键方法:
# Random date between dates
Faker::Time.between(from: 2.days.ago, to: Time.now) #=> "2014-09-18 12:30:59 -0700"
# Random date between dates (within specified part of the day)
Faker::Time.between(from: 2.days.ago, to: Time.now, period: :all) #=> "2014-09-19 07:03:30 -0700"
Faker::Time.between(from: 2.days.ago, to: Time.now, period: :day) #=> "2014-09-18 16:28:13 -0700"
Faker::Time.between(from: 2.days.ago, to: Time.now, period: :night) #=> "2014-09-20 19:39:38 -0700"
Faker::Time.between(from: 2.days.ago, to: Time.now, period: :morning) #=> "2014-09-19 08:07:52 -0700"
Faker::Time.between(from: 2.days.ago, to: Time.now, period: :afternoon) #=> "2014-09-18 12:10:34 -0700"
Faker::Time.between(from: 2.days.ago, to: Time.now, period: :evening) #=> "2014-09-19 20:21:03 -0700"
Faker::Time.between(from: 2.days.ago, to: Time.now, period: :midnight) #=> "2014-09-20 00:40:14 -0700"
# Random time in the future (up to maximum of N days)
Faker::Time.forward(days: 23, period: :morning) #=> "2014-09-26 06:54:47 -0700"
# Random time in the past (up to maximum of N days)
Faker::Time.backward(days: 14, period: :evening) #=> "2014-09-17 19:56:33 -0700"
我会使用
Faker::Number.number
来改变相对于今天的日期。
例如
start_date { Date.today - Faker::Number.number(3).to_i.days }
或者,如果您不想使用 Faker,您可以生成随机的未来或过去日期,如下所示:
rand(1.year).from_now
rand(1.year).ago
据我所知,faker gem 确实有一个日期用途,那就是信用卡到期日。
根据用途,您可以在工厂设置日期。 这可能是这样的:
start_date 日期.今天 + 7.天(1.周、1.月等)
使用信用卡到期日期:
Faker::Business.credit_card_expiry_date
您可以使用不使用 faker 的方式渲染随机日期,而不是使用 Faker
Time.at(0.0 + rand * (Time.now.to_f - 0.0.to_f)).to_date
据我所知,它速度更快,而且您可以通过更多方式使用它。 如果您需要 1970-01-01 到今天以外的其他范围,您也可以使用
Time.at(Time.new(1990).to_f + rand * (Time.now.to_f - Time.new(1990).to_f)).to_date
您可以生成如下随机日期
Faker::Date. Between(2.days.ago, Date.today) #=>“2014 年 9 月 24 日星期三”
您可以在这里找到更多选项https://github.com/stympy/faker/blob/master/doc/default/date.md