2013-03-10 44 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) 
} 
相关问题