我該如何說讓週六和週日從X年到Y年的所有日期,並將它們存儲爲數組?僞代碼將是如何在日期範圍內獲取所有「特定日期」
(year_today..next_year).get_all_dates_for_saturday_and_sunday
或者也許有寶石,迎合這已經?
我該如何說讓週六和週日從X年到Y年的所有日期,並將它們存儲爲數組?僞代碼將是如何在日期範圍內獲取所有「特定日期」
(year_today..next_year).get_all_dates_for_saturday_and_sunday
或者也許有寶石,迎合這已經?
試試這個:
(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...
(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個元素的數組。
以下方法通過避免確定一個範圍內的每一天是否爲一週的給定日期(或兩個給定日期中的某一天)來強調效率而不是簡短。
代碼
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