Techioz Blog

異なる間隔で日付範囲をループするにはどうすればよいですか?

概要

異なる間隔(毎日、毎週、毎月など)をループしたい日付範囲(from、to)があります。

この日付範囲をループするにはどうすればよいですか?

アップデート

ご回答ありがとうございます。次のことを思いつきました。

interval = 'week' # month, year
start = from
while start < to
  stop  = start.send("end_of_#{interval}")
  if stop > to
    stop = to
  end
  logger.debug "Interval from #{start.inspect} to #{stop.inspect}"
  start = stop.send("beginning_of_#{interval}")
  start += 1.send(interval)
end

これは、週、月、または年の間隔で日付範囲をループし、指定された間隔の開始と終了を尊重します。

質問でこれについて言及しなかったので、私を正しい方向に導く答えを選択しました。

解決策

開始日プラス 1.day、1.week、または 1.month が to date より大きくなるまでループしますか?

 > from = Time.now
 => 2012-05-12 09:21:24 -0400 
 > to = Time.now + 1.month + 2.week + 3.day
 => 2012-06-29 09:21:34 -0400 
 > tmp = from
 => 2012-05-12 09:21:24 -0400 
 > begin
?>   tmp += 1.week
?>   puts tmp
?> end while tmp <= to
2012-05-19 09:21:24 -0400
2012-05-26 09:21:24 -0400
2012-06-02 09:21:24 -0400
2012-06-09 09:21:24 -0400
2012-06-16 09:21:24 -0400
2012-06-23 09:21:24 -0400
2012-06-30 09:21:24 -0400
 => nil