ブログ

読んで思い出す。忘れるために書く

Date 型情報から月と日のみで比較する

質問「Ruby - 【Ruby/Rails】西暦なしの日付同士の比較&年1回のメッセージの表示/再表示|teratail」を見掛けて コードの部分だけ書きたくなったので 頭の体操

「ああ~ Lambda が使いたいんじゃ~」というお話

  1. 手順をどうするか考えて
  2. 実際の処理を lambda に閉じ込めて
  3. そしたら また適用順番を考えて
  4. 実際に処理を走らせる
pp current_day = Date.new(2018, 11, 1)
# => #<Date: 2018-11-01 ((2458424j,0s,0n),+0s,2299161j)>
pp to_comparing_day = Date.new(2018, 11, 15)
# => #<Date: 2018-11-15 ((2458438j,0s,0n),+0s,2299161j)>

def compare_month_day(date_a, date_b)
  extract_month_day = ->(date) { [date.month, date.day] }
  is_same_month_and_day = ->(date_array) { a, b = date_array; a.eql?(b) }

  month_and_day = [date_a, date_b].map(&extract_month_day)

  is_same_month_and_day.call(month_and_day)
end

pp compare_month_day(current_day, to_comparing_day)
# => false
pp compare_month_day(current_day, Date.new(2018, 11, 1))
# => true