class JPDate::Holiday

日本の太陽暦の始まり

明治5年11月9日・1872年12月9日施行 太政官布告第337号 改暦ノ布告

「今般太陰曆ヲ廢シ太陽曆御頒行相成候ニ付來ル12月3日ヲ以テ明治6年1月1日ト被定候事」
 太陰暦            太陽暦            西暦
明治5年12月 2日                     1872年12月31日    太陰暦ここまで
明治5年12月 3日    明治6年 1月 1日    1873年 1月 1日    太陽暦ここから

JPDate::Holidayクラスは、太陽暦 明治6年・1873年1月1日以降の日本の祝日を扱う

以下の法律に準拠する

Constants

HOLIDAYS

祝日情報テーブル

NATIONAL_HOLIDAY_START

昭和60年 1985年12月27日公布・施行 法律第103号 国民の祝日に関する法律(改正) 国民の休日の開始日付

SUBSTITUTE_HOLIDAY_START

昭和48年 1973年 4月12日公布・施行 法律第 10号 国民の祝日に関する法律(改正) 振替休日の開始日付

Public Class Methods

list(range) click to toggle source

指定した期間の祝日のハッシュを返す

Example:

JPDate::Holiday.list(2015) # => {#<Date: 2015-01-01 ((2457024j,0s,0n),+0s,2299161j)>=>"元旦", #<Date: 2015-01-12 ((2457035j,0s,0n),+0s,2299161j)>=>"成人の日", #<Date: 2015-02-11 ((2457065j,0s,0n),+0s,2299161j)>=>"建国記念日", #<Date: 2015-03-21 ((2457103j,0s,0n),+0s,2299161j)>=>"春分の日", #<Date: 2015-04-29 ((2457142j,0s,0n),+0s,2299161j)>=>"昭和の日", #<Date: 2015-05-03 ((2457146j,0s,0n),+0s,2299161j)>=>"憲法記念日", #<Date: 2015-05-04 ((2457147j,0s,0n),+0s,2299161j)>=>"みどりの日", #<Date: 2015-05-05 ((2457148j,0s,0n),+0s,2299161j)>=>"こどもの日", #<Date: 2015-05-06 ((2457149j,0s,0n),+0s,2299161j)>=>"振替休日", #<Date: 2015-07-20 ((2457224j,0s,0n),+0s,2299161j)>=>"海の日", #<Date: 2015-09-21 ((2457287j,0s,0n),+0s,2299161j)>=>"敬老の日", #<Date: 2015-09-22 ((2457288j,0s,0n),+0s,2299161j)>=>"国民の休日", #<Date: 2015-09-23 ((2457289j,0s,0n),+0s,2299161j)>=>"秋分の日", #<Date: 2015-10-12 ((2457308j,0s,0n),+0s,2299161j)>=>"体育の日", #<Date: 2015-11-03 ((2457330j,0s,0n),+0s,2299161j)>=>"文化の日", #<Date: 2015-11-23 ((2457350j,0s,0n),+0s,2299161j)>=>"勤労感謝の日", #<Date: 2015-12-23 ((2457380j,0s,0n),+0s,2299161j)>=>"天皇誕生日"}
JPDate::Holiday.list(1989..2014) # => ...中略...
# File lib/jpdate/holiday.rb, line 154
def self.list(range)
  range = range..range if range.class == Integer
  range.each {|y| new(y) unless @@years.include?(y)}
  Hash[@@holidays.sort].select {|k, v| range.include?(k.year)}
end
name(date) click to toggle source

指定した日付の祝日名称を返す

Example:

JPDate::Holiday.name(Date.parse('2014-9-23')) # => "秋分の日"
JPDate::Holiday.name(Date.parse('2014-9-24')) # => nil
# File lib/jpdate/holiday.rb, line 145
def self.name(date)
  new(date.year) unless @@years.include?(date.year)
  @@holidays[date]
end

Private Instance Methods

add_national_holiday(dates) click to toggle source

国民の休日を追加

# File lib/jpdate/holiday.rb, line 189
def add_national_holiday(dates)
  dates.each_cons(2) do |a, b|
    if b - a == 2 && (a + 1).wday != 0 && !@@holidays[a + 1] && a + 1 >= NATIONAL_HOLIDAY_START
      @holidays[a + 1] = '国民の休日'
    end
  end
end
add_substitute_holiday(dates) click to toggle source

振替休日を追加

# File lib/jpdate/holiday.rb, line 179
def add_substitute_holiday(dates)
  dates.each do |date|
    if date.wday == 0 && date >= SUBSTITUTE_HOLIDAY_START
      date += 1 while @holidays[date]
      @holidays[date] = '振替休日'
    end
  end
end
autumn_day(y, m)
Alias for: equinox_day
equinox_day(y, m) click to toggle source

春分・秋分の日付を返す

# File lib/jpdate/holiday.rb, line 209
def equinox_day(y, m)
  case y
  when 1851..1899
    dy = y - 1980
    return Date.new(y, m, (19.8277 + 0.242194*dy - dy/4).to_i) if m == 3
    return Date.new(y, m, (22.2588 + 0.242194*dy - dy/4).to_i) if m == 9
  when 1900..2099
    dy = y - 1900
    return Date.new(y, m, (21.4471 + 0.242377*dy - dy/4).to_i) if m == 3
    return Date.new(y, m, (23.8896 + 0.242032*dy - dy/4).to_i) if m == 9
  when 2100..2150
    dy = y - 1980
    return Date.new(y, m, (21.8510 + 0.242194*dy - dy/4).to_i) if m == 3
    return Date.new(y, m, (24.2488 + 0.242194*dy - dy/4).to_i) if m == 9
  end
end
Also aliased as: spring_day, autumn_day
monday(n, y, m) click to toggle source
# File lib/jpdate/holiday.rb, line 197
def monday(n, y, m) nth_week_day(y, m, n.to_i, 1) end
nth_week_day(y, m, n, w) click to toggle source

y年m月の第n w曜日の日付を返す

Sun Mon Tue Wed Thu Fri Sat

w: 0 1 2 3 4 5 6 以下2014年10月第2月曜日の場合 nth_week_day(2014, 10, 2, 1)

# File lib/jpdate/holiday.rb, line 204
def nth_week_day(y, m, n, w)
  Date.new(y, m, 7 * n - (Date.new(y, m) - w - 1).wday)
end
spring_day(y, m)
Alias for: equinox_day