两个日期间隔之间的交叉点

时间:2011-02-01 14:36:13

标签: ruby date

我有四个日期:

前两个是一个月的开始和结束

start_m = Time.new(2010,1).beginning_of_month
end_m = Time.new(2010,1).end_of_month

和最后两个,d1d2d1 <= d2

我想要的是一个包含来自start_m - &gt;的交集的日期数字的数组。 end_md1 - &gt; d2

例如:

start_m = 2011-01-01
end_m = 2011-01-31
d1 = 2010-12-20
d2 = 2011-01-11

结果将是

[1,2,3 ... 11]

有一个简单的方法来做这个交集吗?

2 个答案:

答案 0 :(得分:5)

require 'date'

start_m = Date.parse('2011-01-01')
end_m = Date.parse('2011-01-31')
d1 = Date.parse('2010-12-20')
d2 = Date.parse('2011-01-11')

puts (start_m..end_m).to_a & (d1..d2).to_a

请参阅Array#&的文档。输出:

2011-01-01
2011-01-02
2011-01-03
2011-01-04
2011-01-05
2011-01-06
2011-01-07
2011-01-08
2011-01-09
2011-01-10
2011-01-11

答案 1 :(得分:1)

我的方法是使用(start_m.to_i..end_m.to_i).step(60*60*24).to_a来使用ruby中的range.step函数。

然后你需要使用Time.at(element).day

转换数组中的每个元素

对两个数组执行此操作,您可以执行array1 & array2,这将为您提供所需的结果。

这只是一个建议,也许有更好的方法来做到这一点。