環境
- Rails 7.x
やりたいこと
Railsで期間を与えてその中に含まれる月の数を数えたい。
コード
def count_months(start_date, end_date) (start_date.beginning_of_month..end_date.end_of_month).map { |d| [d.year, d.month] }.uniq.count end # 使用例 start_date = Date.new(2024, 1, 15) end_date = Date.new(2024, 3, 5) months = count_months(start_date, end_date) # => 3
count_months
メソッドでは、まず開始日と終了日をそれぞれ月の最初と最後に変換している。
map { |d| [d.year, d.month] }
で日付の範囲を [年, 月]
の配列に変換し、 uniq
で重複する月を削除している。
最後に count
メソッドで、ユニークな月の数をカウントしている。
この例では、開始日が2024年1月15日で、終了日が2024年3月5日なので、含まれる月は1月、2月、3月の3ヶ月となる。