2016-08-29 47 views

回答

3

试试这个:

(Date.today..Date.today.next_year).select { |date| 
    date.sunday? or date.saturday? 
} 

#=> [Sat, 03 Sep 2016,Sun, 04 Sep 2016,Sat, 10 Sep 2016,Sun, 11 Sep 2016... 
0
(Date.today..(Date.today + 1.year)).select do |date| 
    date.saturday? || date.sunday? 
end # => [Sat, 03 Sep 2016, Sun, 04 Sep 2016, Sat, 10 Sep 2016, ... 

这将然后给你含每日期是星期六或一年的今天和今天之间的某个星期天104个元素的数组。

0

以下方法通过避免确定一个范围内的每一天是否为一周的给定日期(或两个给定日期中的某一天)来强调效率而不是简短。

代码

require 'date' 

def dates_by_years_and_wday(start_year, end_year, wday) 
    (first_date_by_year_and_wday(start_year, wday)... 
    first_date_by_year_and_wday(end_year+1, wday)).step(7).to_a 
end 

def first_date_by_year_and_wday(year, wday) 
    d = Date.new(year) 
    d + (wday >= d.wday ? wday - d.wday : 7 + wday - d.wday) 
end 

注意,范围与三个点限定,这意味着在end_year第一日期被排除。

SATURDAY = 6 
SUNDAY = 0 
start_year, end_year = 2015, 2017 

dates_by_years_and_wday(start_year, end_year, SATURDAY) 
    #=> [#<Date: 2015-01-03 ((2457026j,0s,0n),+0s,2299161j)>, 
    # #<Date: 2015-01-10 ((2457033j,0s,0n),+0s,2299161j)>, 
    # ... 
    # #<Date: 2017-12-30 ((2458118j,0s,0n),+0s,2299161j)>] 
dates_by_years_and_wday(start_year, end_year, SATURDAY).size 
    #=> 157 

dates_by_years_and_wday(start_year, end_year, SUNDAY) 
    #=> [#<Date: 2015-01-04 ((2457027j,0s,0n),+0s,2299161j)>, 
    # #<Date: 2015-01-11 ((2457034j,0s,0n),+0s,2299161j)>, 
    # ... 
    # #<Date: 2017-12-31 ((2458119j,0s,0n),+0s,2299161j)>]  
dates_by_years_and_wday(start_year, end_year, SUNDAY).size 
    #=> 157 
相关问题