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

然而,月份的长度并不相同。有没有办法在几个月内恢复这种差异?

4

1 回答 1

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)
}
于 2013-03-10T21:45:45.677 回答