【问题标题】:using faker gem to generate date使用 faker gem 生成日期
【发布时间】:2020-04-11 09:30:04
【问题描述】:

我正在使用 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

【问题讨论】:

  • 大概是时候标记我认为的答案了吗?
  • 您可以根据您的用例使用Faker生成日期Refer this link

标签: ruby-on-rails date faker


【解决方案1】:

Faker 现在支持时间和日期。

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

以下是一些关键方法:

# 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"

【讨论】:

    【解决方案2】:

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

    例如

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

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

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

    【讨论】:

      【解决方案3】:

      使用信用卡到期日期:

      Faker::Business.credit_card_expiry_date
      

      【讨论】:

        【解决方案4】:

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

        根据使用情况,您可以在工厂设置日期。这可能是:

        start_date Date.today + 7.days(1.week、1.month 等)

        【讨论】:

          【解决方案5】:

          您可以通过 usin 渲染一个随机 Date 而不是使用 Faker,而无需使用 Faker

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

          AFAIK 它更快,您可以通过更多方式使用它。 如果您需要从 1970-01-01 到今天的另一个 Range,您也可以使用

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

          【讨论】:

            【解决方案6】:

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

            Faker::Date.between(2.days.ago, Date.today) #=> "Wed, 24 Sep 2014"

            您可以在这里找到更多选项https://github.com/stympy/faker/blob/master/doc/default/date.md

            【讨论】:

              猜你喜欢
              • 2019-06-18
              • 2014-12-29
              • 2014-03-12
              • 2019-09-29
              • 1970-01-01
              • 2012-10-24
              • 2019-08-06
              • 1970-01-01
              • 2019-04-29
              相关资源
              最近更新 更多