Ruby
Rails

[ruby][rails]Date,Timeクラスの曜日チェック 〜月末の指定曜日を出力を添えて〜

More than 1 year has passed since last update.

Date,Timeクラスの曜日チェック

rubyのDate,Timeクラスで曜日をチェックしたい場合、
#sunday?,#monday?,#tuesday?,#wednesday?,#thursday?,#friday?,#saturday?が使えます:moyai:
このメソッドはTimeクラスにもあります:cow:

# もしDate.nowが日曜日だったら・・・
Date.now.sunday?    # => true
Date.now.monday?    # => false
Date.now.tuesday?   # => false
Date.now.wednesday? # => false
Date.now.thursday?  # => false
Date.now.friday?    # => false
Date.now.saturday?  # => false

月末の指定曜日を出力するメソッド

月の最後の指定した曜日の日付を出力するようなメソッドは、
デフォルトでは存在しないみたいなので、自作する必要があります。

rubyだけで実装すると・・・

def last_friday_of_month(date)
  beginning_of_month= Date.new(date.year, date.month,  1) # 月初
  end_of_month   = Date.new(date.year, date.month, -1) # 月末
  [*beginning_of_month..end_of_month].reverse_each do |date|
    break date if date.friday? # 月の最後の"金曜"の日付を出力
  end
end

require 'date'
last_friday_of_month(Date.today)
# => #<Date: 2017-07-28 ((2457963j,0s,0n),+0s,2299161j)>

railsだと少し簡潔に

def last_friday_of_month(date)
  [*date.beginning_of_month..date.end_of_month].reverse_each do |date|
    break date if date.friday? # 金曜
  end
end

last_friday_of_month(Date.today)
# => Fri, 28 Jul 2017