我该如何说让周六和周日从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