这是一周的例子,从星期日到星期六:
11/21/2010 - 11/27/2010
我想找到周日至周六同一周的日期,仅限去年。
答案 0 :(得分:4)
require 'date' # Included in Ruby's standard library, no gem needed
now = Date.today
before = Date.civil( now.year-1, now.month, now.day )
sunday = Date.commercial( before.year, before.cweek, 1 ) - 1 # Day 1 is Monday
this_week_last_year = sunday..(sunday+6)
修改虽然Date.commercial
很酷,但不需要。这是一个更简单的方法来查找本周开始的星期日:
require 'date'
now = Date.today
before = Date.civil( now.year-1, now.month, now.day )
sunday = before - before.wday
答案 1 :(得分:4)
>> 1.year.ago.beginning_of_week.to_date
Mon, 30 Nov 2009
>> 1.year.ago.end_of_week.to_date
Sun, 06 Dec 2009
答案 2 :(得分:3)
require 'chronic'
Chronic.parse '1 year ago'
# => 2009-12-01 14:05:39 -0800
Chronic是一款非常甜美的rubygem,可以处理各种事物,包括根据您的特殊要求进行调整。
答案 3 :(得分:1)
试试这个:
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
您还可以计算两天中某一天的一周中的一周,然后减去365.days
使用Rails 3实际上将ActiveSupport拆分为更精细的粒度,因此如果您不想要,则无需加载整个套件。我这么做是为了简单。有关详情,请访问ActiveSupport Core Extensions page。
或者,你可以通过字符串解析得到jiggy:
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
我喜欢Chronic,而且,对于这种解析,我认为这是一个很好的解决方案,因为字符串是你创建的,而不是用户,所以你的代码用不可解析的字符串炸毁的可能性更小。我不确定是否因为解析而受到速度的影响,所以如果解析将在一个循环中,那么一些基准测试可能是有序的。