月份的日期差异

时间:2013-03-10 21:19:30

标签: ruby

我需要计算数组中每个连续日期对的月份差异,以便按日期的频率对其进行分类,例如每月,每季度,每年。

这涉及将字符串数组解析为日期数组

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)]

然而,几个月的长度并不相同。有几种方法可以在几个月内恢复这种差异吗?

1 个答案:

答案 0 :(得分:2)

获得两个日期之间的月数的最简单方法是:

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

此外,使用Array.new创建数组并用循环填充它们并不是非常惯用的Ruby。通常,您只需使用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)
}