43 votes

Comment générer une date aléatoire en Ruby ?

J'ai un modèle dans mon application Rails 3 qui a un date champ :

class CreateJobs < ActiveRecord::Migration
  def self.up
    create_table :jobs do |t|
      t.date "job_date", :null => false
      ...
      t.timestamps
    end
  end
  ...
end

Je voudrais pré-remplir ma base de données avec des valeurs de date aléatoires.

Quel est le moyen le plus simple de générer une date aléatoire ?

67voto

Mladen Jablanović Points 22082

Voici une légère extension de la réponse de Chris, avec des options. from y to paramètres :

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

> time_rand
 => 1977-11-02 04:42:02 0100 
> time_rand Time.local(2010, 1, 1)
 => 2010-07-17 00:22:42 0200 
> time_rand Time.local(2010, 1, 1), Time.local(2010, 7, 1)
 => 2010-06-28 06:44:27 0200

45voto

Chris Heald Points 28814

Générer un temps aléatoire entre epoch, le début de 1970, et maintenant :

Time.at(rand * Time.now.to_i)

23voto

iGallina Points 390

Garder simple..

Date.today-rand(10000) #for previous dates

Date.today+rand(10000) #for future dates

PS. En augmentant/diminuant le paramètre '10000', vous modifiez la plage de dates disponibles.

17voto

idrinkpabst Points 668
rand(Date.civil(1990, 1, 1)..Date.civil(2050, 12, 31))

ma méthode préférée

def random_date_in_year(year)
  return rand(Date.civil(year.min, 1, 1)..Date.civil(year.max, 12, 31)) if year.kind_of?(Range)
  rand(Date.civil(year, 1, 1)..Date.civil(year, 12, 31))
end

puis utiliser comme

random_date = random_date_in_year(2000..2020)

6voto

Cyril Duchon-Doris Points 4798

Pour les versions récentes de Ruby/Rails, vous pouvez utiliser rand sur un Time gamme ❤️ ! !!

min_date = Time.now - 8.years
max_date = Time.now - 1.year
rand(min_date..max_date)
# => "2009-12-21T15:15:17.162+01:00" (Time)

N'hésitez pas à ajouter to_date , to_datetime etc., pour les convertir dans votre classe préférée

Testé sur Rails 5.0.3 et Ruby 2.3.3, mais apparemment disponible à partir de Ruby 1.9+ et Rails 3+.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X