2016-08-29 188 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 
相關問題