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?