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

And*_*i S 0 ruby date

我有四个日期:

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

start_m = Time.new(2010,1).beginning_of_month
end_m = Time.new(2010,1).end_of_month
Run Code Online (Sandbox Code Playgroud)

和最后两个,d1并且d2,与d1 <= d2

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

例如:

start_m = 2011-01-01
end_m = 2011-01-31
d1 = 2010-12-20
d2 = 2011-01-11
Run Code Online (Sandbox Code Playgroud)

结果将是

[1,2,3 ... 11]
Run Code Online (Sandbox Code Playgroud)

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

ste*_*lag 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
Run Code Online (Sandbox Code Playgroud)

请参阅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
Run Code Online (Sandbox Code Playgroud)