2013-03-10 79 views
0

我需要計算數組中每個連續日期對的日期差異,以便按日期的頻率對其進行分類,例如每月,每季度,每年。以月爲單位的日期差異

這涉及字符串數組解析成日期

array_of_dates = Array.new 
array_of_strings.each do |str| 
    array_of_dates << Date.strpdate str, "%Y%m%d" 
end 

的陣列,並且計算用於每個連續對日期的

diffs = Array.new 
array.of.dates.each_cons(2) do |a,b| 
    diffs << b - a 
end 

此返回比率的陣列,例如日期差:

=> [(31/1), (29/1), (31/1), (30/1), (31/1)] 

然而,月份的長度並不相同。有沒有辦法在幾個月內回覆這種差異?

回答

2

得到兩個日期之間的月數最簡單的方法是做到這一點:

months_between = finish.month - start.month + 12 * (finish.year - start.year) 

而且,與Array.new創建數組,並在填補他們的循環不是很地道的紅寶石。通常你只會直接從源陣列使用map創建的目標陣列:

array_of_dates = array_of_strings.map { |s| Date.strptime s, "%Y%m%d" } 

diffs = array_of_dates.each_cons(2).map { 
    |a, b| b.month - a.month + 12 * (b.year - a.year) 
} 

你甚至可以做到這一切在一個步驟,如果你不指定日期的陣列別的東西:

diffs = array_of_strings.map {|s| Date.strptime s, "%Y%m%d" }.each_cons(2).map { 
    |a, b| 
    b.month - a.month + 12 * (b.year - a.year) 
}