我需要计算数组中每个连续日期对的月份差异,以便按日期的频率对其进行分类,例如每月,每季度,每年。
这涉及将字符串数组解析为日期数组
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)]
然而,几个月的长度并不相同。有几种方法可以在几个月内恢复这种差异吗?
答案 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)
}