いろいろあると思うけど、 holiday_japan を使ってみたわ。
とりあえず、うちのサーバのパッケージにはないみたいだから、rubygems でもらってきましょう。
# gem install holiday_japan
さて、とりあえず知りたいのは以下よね?
以下のようにしましょう。平日なら nil で、休日ならお休みの名前が入るの。
require 'holiday_japan' p HolidayJapan.name(Date.today) p HolidayJapan.name(Date.new(2016,5,5))
ちなみに、土日には対応してないみたいなのよね。
なので、こんなことをしてみたり。
require 'holiday_japan' def holiday? r = HolidayJapan.name(Date.today) # 休日ならnil以外が入る。 if r == nil # 祝日ではない。 d = Time.now.wday if d == 6 || d == 0 # 土日 r = "土日" end end r end
必要なら、振替休日も組み込んでみましょうか?
ちゃんと動作しているのか確認してみましょう。たとえば2016年で。
HolidayJapan.list_year(2016).each{|a,b| print <<EOM #{a}:#{b} EOM }
実行結果は以下。
2016-01-01:元日 2016-01-11:成人の日 2016-02-11:建国記念の日 2016-03-20:春分の日 2016-03-21:振替休日 2016-04-29:昭和の日 2016-05-03:憲法記念日 2016-05-04:みどりの日 2016-05-05:こどもの日 2016-07-18:海の日 2016-08-11:山の日 2016-09-19:敬老の日 2016-09-22:秋分の日 2016-10-10:体育の日 2016-11-03:文化の日 2016-11-23:勤労感謝の日 2016-12-23:天皇誕生日
うん。
で、これを内閣府の祝日の公示とくらべてみるわね。
以下は、内閣府の抜粋。
平成28年(2016)の国民の祝日 3月21日は休日となります。 元日 1月1日 成人の日 1月11日 建国記念の日 2月11日 春分の日 3月20日 昭和の日 4月29日 憲法記念日 5月3日 みどりの日 5月4日 こどもの日 5月5日 海の日 7月18日 山の日 8月11日 敬老の日 9月19日 秋分の日 9月22日 体育の日 10月10日 文化の日 11月3日 勤労感謝の日 11月23日 天皇誕生日 12月23日
うん、合ってるみたいね、よしよし。
実際の実装に入れる前提で遊んでみましょう。
today.holiday? (nilなら平日、休日なら休日名が入る)
なお、土日は基本的にお休みとして、この日は曜日を返しましょう。
うん、Dateに上の機能をとりつけた、Date2をでっちあげてみるわね。
class Date2 < Date def holiday? r = HolidayJapan.name(self) # 休日ならnil以外が入る。 if r == nil # 祝日ではない。 d = self.wday if d == 6 || d == 0 # 土日 if d == 6 r = "土曜日" elsif d == 0 r = "日曜日" end end end r end end
うん、これでいいわね。使い方は、
p Date2.new(2001,5,5).holiday?
とでも書いてみたら、わかると思うわ。