2011-02-01 40 views
0

我有四個日期:路口日期間隔之間的兩個

前兩個是一個月的開始和結束

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

最後兩個,d1d2,與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 

結果將是

[1,2,3 ... 11] 

有一個簡單的方法來做到這一點交集?

回答

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

我的做法是從使用(start_m.to_i..end_m.to_i).step(60*60*24).to_a ruby​​中使用range.step函數。

那麼你就需要給每個元素使用Time.at(element).day

的陣列做這兩個陣列的轉換,你可以做array1 & array2,這將給你你想要的結果。

這只是一個建議,也許有更好的方法來做到這一點。