fen*_*nec 5 ruby datetime date
这是一个例子,从星期日到星期六:
11/21/2010 - 11/27/2010
Run Code Online (Sandbox Code Playgroud)
我想查找仅在去年的周日至周六同一周的日期。
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)
Run Code Online (Sandbox Code Playgroud)
编辑:虽然Date.commercial
很酷,但这不是必需的。这是查找从本周开始的星期日的更简单方法:
require 'date'
now = Date.today
before = Date.civil( now.year-1, now.month, now.day )
sunday = before - before.wday
Run Code Online (Sandbox Code Playgroud)
>> 1.year.ago.beginning_of_week.to_date
Mon, 30 Nov 2009
>> 1.year.ago.end_of_week.to_date
Sun, 06 Dec 2009
Run Code Online (Sandbox Code Playgroud)
尝试这个:
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
Run Code Online (Sandbox Code Playgroud)
您还可以计算出这两天中的某一天是一年中的第几周,然后减去365.days
ActiveSupport 实际上在 Rails 3 中被分成了更细的粒度,因此如果您不需要,则不必加载整个套件。我这样做是为了简单。更多信息请参见ActiveSupport 核心扩展页面。
或者,你可能会因为字符串解析而变得不稳定:
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
Run Code Online (Sandbox Code Playgroud)
我喜欢 Chronic,对于这种解析,我认为这是一个不错的解决方案,因为字符串是您创建的东西,而不是用户,因此您的代码因无法解析的字符串而崩溃的可能性较小。我不确定是否会因为解析而影响速度,因此如果解析将处于循环状态,则某些基准测试可能是有序的。