我有四个日期:
前两个是一个月的开始和结束
start_m = Time.new(2010,1).beginning_of_month
end_m = Time.new(2010,1).end_of_month
和最后两个,d1
和d2
,d1 <= d2
我想要的是一个包含来自start_m
- &gt;的交集的日期数字的数组。 end_m
和d1
- &gt; d2
例如:
start_m = 2011-01-01
end_m = 2011-01-31
d1 = 2010-12-20
d2 = 2011-01-11
结果将是
[1,2,3 ... 11]
有一个简单的方法来做这个交集吗?
答案 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
,这将为您提供所需的结果。
这只是一个建议,也许有更好的方法来做到这一点。