En ruby, il est très facile de compter le nombre de jours entre deux dates.
date1 = 1.month.ago
date2 = Date.today
puts date2-date1
Cependant il peut arriver que vous ayez besoin non pas de calculer le nombre de jours entre deux dates … Mais le nombre de jours de semaine (du lundi au vendredi) entre deux dates.
Dans le cas d’un extranet pour calculer le nombre de jours travaillés, cela peut s’avérer très utile
Vamos ! Placez, dans votre code (dans l’idée, n’importe ou. Mais mettez le à un endroit ou vous le retrouverez. Sinon, vous allez rapidement perdre le contrôle de votre application) :
class Date
def weekdays_until(date)
return 0 if date <= self
(self..date).select{|day| day.is_weekday?}.size
end
def is_weekday?
self.wday != 0 && self.wday != 6
end
end
Et pour l’utiliser :
1.month.ago.weekdays_until(Date.today)
Cool non ?
Que faisons-nous ?
Nous surchargeons l’objet Date en y ajoutant deux nouvelles méthodes :
- is_weekday? qui nous retourne true si on est du lundi au vendredi.
- weekdays_until qui nous calcule le nombre de jours du lundi au vendredi seulement.
Evidemment, cela ne prends pas en compte les vacances scolaires
Note : les « tricks » 1.month.ago ne sont disponibles que si vous êtes dans un environnement Rails. Dans le cas contraire, il vous faudra calculer la date passée manuellement





« working_day » ?
Non. Ca n’a pas forcément de rapport avec les jours travaillés (on peut travailler le samedi par ailleurs). C’est bien les jours de la semaine.