Essayez ceci:
require 'active_support/all'
today = Time.now #=> 2010-12-01 14:58:36 -0700
sunday = (today - today.wday.days).beginning_of_day #=> 2010-11-28 00:00:00 -0700
saturday = sunday + 6.days #=> 2010-12-04 00:00:00 -0700
sunday.wday #=> 0
saturday.wday #=> 6
sunday - 1.year #=> 2009-11-28 00:00:00 -0700
sunday.prev_year #=> 2009-11-28 00:00:00 -0700
saturday - 1.year #=> 2009-12-04 00:00:00 -0700
saturday.prev_year #=> 2009-12-04 00:00:00 -0700
Vous pouvez également comprendre la semaine de l'année pour l'un des deux jours, puis soustraire 365.days
ActiveSupport était en fait divisé en granularité plus fine avec Rails 3, donc vous n'avez pas à charger dans toute la suite si vous ne le voulez pas. Je l'ai fait pour la simplicité. Plus d'informations est sur le ActiveSupport Core Extensions page.
Ou, vous pourriez obtenir Jiggy avec l'analyse syntaxique de la chaîne:
require 'chronic'
Chronic.parse('1 year ago last sunday') #=> 2009-11-28 12:00:00 -0700
Chronic.parse('1 year ago next saturday') #=> 2009-12-04 12:00:00 -0700
J'aime chronique, et, pour ce genre d'analyse syntaxique Je pense qu'il est une solution OK car la chaîne est quelque chose que vous voulez créer, et non un utilisateur, il y a donc moins de chances que votre code ne fasse exploser une chaîne impossible à analyser. Je ne suis pas sûr qu'il y ait un hit de vitesse à cause de l'analyse syntaxique, donc certains benchmarks pourraient être dans l'ordre si l'analyse devait être en boucle.