如何在红宝石中获得2个日期的中期?

时间:2012-05-24 07:57:54

标签: ruby

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]

2 个答案:

答案 0 :(得分:2)

匆匆实施:

xs = (a1..a2).to_a & (b1..b2).to_a
(xs.first..xs.last)
# => Sun, 24 Jun 2012..Tue, 24 Jul 2012

一系列日期没有什么特别之处。因此,搜索“范围交叉点”以更有效地执行此操作(例如here)。现在你可以写:

(a1..a2) & (b1..b2)

答案 1 :(得分:0)

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

[Sun,2012年6月24日,2012年7月24日星期二]