Ruby on Rails : La gestion des dates en Ruby

posté par Anthony Heukmes le 09-02-2008

Gestion des dates en Ruby

La première force du framework Ruby on Rails (RoR) est qu'il est basé sur ce merveilleux langage qu'est Ruby. Cependant, trop de gens plongent directement dans rails sans prendre la peine d'étudier Ruby un peu plus en profondeur... Une bonne connaissance du langage vous permettra pourtant d'améliorer la qualité de vos applications web.

J'ai souvent trouvé la gestion des dates assez fastidieuses avec les différents langages que j'ai utilisés. Mais c'était avant de connaître Ruby!

Je vais vous présenter dans cet article différentes astuces permettant de travailler agréablement et efficacement avec les dates dans vos différents controllers/helpers/views.

La date du jour, svp! Et pourquoi pas la date avec l'heure également?

  >> Time.now
  => Sat Feb 09 17:14:37 +0100 2008
  >> Date.today
  => Sat, 09 Feb 2008


Ok c'est bien beau, mais je vais pas afficher ça dans une vue, on est pas en Amérique ici!
Pas de problème, la méthode strftime est faite pour vous!
Pourquoi ne pas ajouter une méthode format_date dans votre application helper?

  def format_date(date)
      format = '%d-%m-%Y %H:%M'
      return date.strftime(format)
  end;

  # Exemple d'appel dans une vue :
  format_date(Time.now)

Comment je fais pour extraire le jour, ou le mois, ... de ma date?

  date = Date.today

  date.sec
  date.min
  date.hour
  date.day
  date.month
  date.year


Et comment je récupère un objet Date depuis une chaîne de caractères (String)?

  date = Date.parse(mon_string)

Ruby va se débrouiller pour vous créer une date, que vous lui passiez une date au format dd-mm-YYYY ou month, day, year, ou autre...

Ok, c'est pas mal. Mais comment faire pour ajouter un jour, 5 jours, 3 semaines, 10 mois? ...

  today = Date.today

  tomorrow = today + 1.day
  yesterday = today - 1.day

  next_week = today + 1.week
  in_two_weeks = today + 2.weeks

  next_month = today + 1.month
  in_five_months = today + 5.months


C'est pas super simple ça? Vive le Ruby!
Vous avez remarqué que je différencie le singulier et le pluriel. C'est parce que je trouve que c'est plus lisible mais vous n'êtes pas obligé d'en faire autant.
Today + 5 days == Today + 5.day

Vous en voulez encore? Comment faire pour parcourir un ensemble de dates?

  start_date = Date.today
  end_date = start_date + 3.days

  (start_date..end_date).each do |d|
      logger.info d.to_s
  end

  # Affichera, dans votre fichier de log :
  2008-02-09
  2008-02-10
  2008-02-11


C'était une introduction, j'espère que ça vous sera utile!

Pour Ruby, hip hip hip?


  Version imprimable


Commentaires

Pseudo :
Code anti-spam : (recopier : )



Vive le rubi on rails
Posté par falc0 le 25-07-2008



© 2dconcept Tous droits réservés 2007 | Plan du site | Hébergement par Netux