использование поддельного драгоценного камня для генерации даты

Я использую factory girl и faker для генерации данных для приложения rails. Проблема в том, что в документах фейкера ничего не говорится о генерации случайных дат.

Вот мой существующий код. Как видите, я не знаю, что делать после 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

person jLuc    schedule 16.04.2014    source источник
comment
О времени, чтобы отметить ответ, я думаю?   -  person rmcsharry    schedule 05.09.2016
comment
Вы можете сгенерировать дату с помощью Faker в соответствии с вашим вариантом использования Перейти по этой ссылке   -  person Akansha    schedule 18.03.2020


Ответы (6)


Faker теперь поддерживает время и дату.

Not sure when they put this in but the latest version supports Times, which you can convert to a Date quite easily, if that's required.

Вот несколько основных методов:

# 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"
person Joshua Pinter    schedule 19.05.2015

Я бы использовал 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
person Community    schedule 17.04.2014

Используйте срок действия кредитной карты:

Faker::Business.credit_card_expiry_date
person ryan0    schedule 01.08.2014

Насколько я знаю, фальшивый драгоценный камень имеет одну дату использования, и это дата истечения срока действия кредитной карты.

В зависимости от использования вы можете просто установить даты на своем заводе. Это может быть так:

start_date Дата.сегодня + 7.дней (1.неделя, 1.месяц и т.д.)

person Bob Roberts    schedule 17.04.2014

Вместо того, чтобы использовать 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
person Saggex    schedule 17.04.2014

Вы можете генерировать случайные даты, как показано ниже.

Faker::Date.between(2.days.ago, Date.today) #=> "Ср, 24 сентября 2014"

Дополнительные параметры можно найти здесь https://github.com/stympy/faker/blob/master/doc/default/date.md

person Peter T.    schedule 03.05.2019