Rails:计算两个日期范围之间重叠的天数

时间:2015-05-19 05:38:27

标签: ruby-on-rails

好吧,我们说我们有三个日期范围。

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天)?

有一种简单的方法可以计算出来吗?

1 个答案:

答案 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,但很大程度上取决于您是否包含边界。