c は 2 周期の内側の周期でなければなりません。最もエレガントな方法でそれを取得する方法は?
a1=Date.current
a2=Date.current + 2.months
b1=Date.current + 1.month
b2=Date.current + 3.months
c=???
c.should_be [Date.current + 1.month, Date.current + 2.months]
c は 2 周期の内側の周期でなければなりません。最もエレガントな方法でそれを取得する方法は?
a1=Date.current
a2=Date.current + 2.months
b1=Date.current + 1.month
b2=Date.current + 3.months
c=???
c.should_be [Date.current + 1.month, Date.current + 2.months]
急いで実装:
xs = (a1..a2).to_a & (b1..b2).to_a
(xs.first..xs.last)
# => Sun, 24 Jun 2012..Tue, 24 Jul 2012
日付の範囲について特別なことは何もありません。そのため、「範囲交差」を検索して、より効率的に実行します (たとえば、ここ)。これで、次のように記述できます。
(a1..a2) & (b1..b2)
d= [a1, a2, b1, b2]
[*1..d.length/ 2].map do |dt|
d.shift(2)
end.map do |dx|
Date.current+ (dx[1]- dx[0])
end
[2012 年 6 月 24 日 (日)、2012 年 7 月 24 日 (火)]