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

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

他の何かのために日付の配列が必要ない場合は、すべてを 1 つのステップで行うこともできます。

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 に答える