好吧,我们说我们有三个日期范围。
1. date1=01-20-2015..02-15-2015
2. date2 = 01-01-2015..01-31-2015
3. date3 = 02-01-2015..02-28-2015
我需要一种方法来计算date1和date2重叠之间的天数(在这种情况下为10天)。 date1和date3之间的天数重叠(在这种情况下为15天)?
有一种简单的方法可以计算出来吗?
答案 0 :(得分:1)
如果你有:
r1= (Date.new(2015, 01, 20))..(Date.new(2015, 2, 15))
r2= (Date.new(2015, 01, 1))..(Date.new(2015, 1, 31))
你可以这样检查交叉路口:
r1.to_a & r2.to_a
=> [Tue, 20 Jan 2015,
Wed, 21 Jan 2015,
Thu, 22 Jan 2015,
Fri, 23 Jan 2015,
Sat, 24 Jan 2015,
Sun, 25 Jan 2015,
Mon, 26 Jan 2015,
Tue, 27 Jan 2015,
Wed, 28 Jan 2015,
Thu, 29 Jan 2015,
Fri, 30 Jan 2015,
Sat, 31 Jan 2015]
成本是通过
将范围转换为数组您可以注意到(r1.to_a & r2.to_a).count #=> 12
,而不是10
,但很大程度上取决于您是否包含边界。