2010-12-01 82 views

回答

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

的ActiveSupport实际上分成更细的粒度和Rails 3,所以如果你不想要,你不必在整个套件中加载。我是为了简单而做的。更多的信息在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 

我喜欢慢性病,而且,对于这种分析我觉得这是一个好办法,因为该字符串是东西,你会创造,而不是一个用户,所以你的代码被一个不可解析的字符串炸毁的可能性很小。我不确定是否有速度问题,因为解析过程中可能会有一些基准测试结果,如果解析过程会进入循环。

3
require 'chronic' 
Chronic.parse '1 year ago' 
# => 2009-12-01 14:05:39 -0800 

Chronic是一个非常可爱的rubygem,它可以处理一系列的事情,包括适应您的特定要求。

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 
3
>> 1.year.ago.beginning_of_week.to_date 
Mon, 30 Nov 2009 
>> 1.year.ago.end_of_week.to_date 
Sun, 06 Dec 2009 
相关问题