Ruby/Rails : Nombre de jours de semaine entre deux dates

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

  • Twitter_social
  • Facebook_social

Commentaires

Philippe
Philippe dit: 23 novembre 2008 23:00 Site web

"working_day" ? :)

Damien
Damien dit: 23 novembre 2008 23:00 Site web

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.

Postez un commentaire