discourse-calendar/vendor/holidays/definitions/jp.yaml

762 lines
17 KiB
YAML

# Japanese holiday definitions for Ruby Holiday gem.
# Reference:
# - http://www.h3.dion.ne.jp/~sakatsu/holiday_topic.htm
# - http://www8.cao.go.jp/chosei/shukujitsu/gaiyou.html
# - https://en.wikipedia.org/wiki/Public_holidays_in_Japan
#
# For Japanese/English translations of each holiday:
# - https://kotoritone.com/japanesecalendar/holidays/2019/
#
# This definition can calculate current Japanese holidays,
# don't compat with past changes of Japan Holiday Act.
#
# CHANGES:
# 2010-12-25: Initial version by Tatsuki Sugiura <sugi@nemui.org>
# 2014-11-09: Added substitute holiday by Yoshiyuki Hirano <yoshiyuki.hirano@henteco-labs.com>
# 2015-05-10: Non-Monday substitute holidays by Shuhei Kagawa <shuhei.kagawa@gmail.com>
# 2015-12-15: Added mountain day by Tsuyoshi Sano <ttwo32@gmail.com>
# 2016-03-26: Updated to match new custom method signature. See below for more. Phil Trimble <philtrimble@gmail.com>
# 2019-02-10: Changing usage of 'year_ranges.after' to 'year_ranges.from' and 'year_ranges.before' to 'year_ranges.until', see https://github.com/holidays/definitions/issues/117
#
# MAINTAINER NOTE: This is the most complex set of custom date methods in the entire
# project, mainly surrounding the idea of 'substitute' holidays. Since this is
# the only one that is this complex I have settled on a less-than-ideal solution.
# It is overly verbose and not easy to follow. It will be a target for refactoring
# in the near future.
---
months:
1:
- name: 元日
regions: [jp]
mday: 1
- name: 成人の日
regions: [jp]
wday: 1
week: 2
- name: 振替休日
regions: [jp]
mday: 1
function: jp_substitute_holiday(year, month, day)
2:
- name: 建国記念の日
regions: [jp]
mday: 11
- name: 振替休日
regions: [jp]
mday: 11
function: jp_substitute_holiday(year, month, day)
- name: 天皇誕生日
regions: [jp]
mday: 23
year_ranges:
from: 2020
- name: 振替休日
regions: [jp]
mday: 23
function: jp_substitute_holiday(year, month, day)
year_ranges:
from: 2020
3:
- name: 春分の日
regions: [jp]
function: jp_vernal_equinox_day(year)
- name: 振替休日
regions: [jp]
function: jp_vernal_equinox_day_substitute(year)
4:
- name: 昭和の日
regions: [jp]
mday: 29
- name: 振替休日
regions: [jp]
mday: 29
function: jp_substitute_holiday(year, month, day)
- name: 休日
regions: [jp]
mday: 30
year_ranges:
limited: [2019]
5:
- name: 天皇即位
regions: [jp]
mday: 1
year_ranges:
limited: [2019]
- name: 休日
regions: [jp]
mday: 2
year_ranges:
limited: [2019]
- name: 憲法記念日
regions: [jp]
mday: 3
- name: みどりの日
regions: [jp]
mday: 4
- name: こどもの日
regions: [jp]
mday: 5
- name: 振替休日
regions: [jp]
mday: 3
function: jp_substitute_holiday(year, month, day)
- name: 振替休日
regions: [jp]
mday: 4
function: jp_substitute_holiday(year, month, day)
- name: 振替休日
regions: [jp]
mday: 5
function: jp_substitute_holiday(year, month, day)
7:
- name: 海の日
regions: [jp]
mday: 20
year_ranges:
between:
start: 1996
end: 2002
- name: 海の日
regions: [jp]
wday: 1
week: 3
year_ranges:
between:
start: 2003
end: 2019
- name: 海の日
regions: [jp]
mday: 23
year_ranges:
limited: [2020]
- name: 海の日
regions: [jp]
mday: 22
year_ranges:
limited: [2021]
- name: 海の日
regions: [jp]
wday: 1
week: 3
year_ranges:
from: 2022
- name: 振替休日
regions: [jp]
function: jp_marine_day_substitute(year)
year_ranges:
between:
start: 1996
end: 2002
- name: スポーツの日
regions: [jp]
mday: 23
year_ranges:
limited: [2021]
- name: スポーツの日
regions: [jp]
mday: 24
year_ranges:
limited: [2020]
8:
- name: 山の日
regions: [jp]
year_ranges:
between:
start: 2016
end: 2019
function: jp_mountain_holiday(year)
- name: 山の日
regions: [jp]
mday: 10
year_ranges:
limited: [2020]
- name: 山の日
regions: [jp]
mday: 8
year_ranges:
limited: [2021]
- name: 山の日
regions: [jp]
year_ranges:
from: 2022
function: jp_mountain_holiday(year)
- name: 振替休日
regions: [jp]
year_ranges:
between:
start: 2016
end: 2020
function: jp_mountain_holiday_substitute(year)
- name: 振替休日
regions: [jp]
mday: 9
year_ranges:
limited: [2021]
- name: 振替休日
regions: [jp]
year_ranges:
from: 2022
function: jp_mountain_holiday_substitute(year)
9:
- name: 敬老の日
regions: [jp]
wday: 1
week: 3
- name: 振替休日
regions: [jp]
function: jp_respect_for_aged_holiday_substitute(year)
- name: 国民の休日
regions: [jp]
year_ranges:
from: 2003
function: jp_citizens_holiday(year)
- name: 秋分の日
regions: [jp]
function: jp_national_culture_day(year)
- name: 振替休日
regions: [jp]
function: jp_national_culture_day_substitute(year)
10:
- name: 体育の日
regions: [jp]
wday: 1
week: 2
year_ranges:
until: 2019
- name: スポーツの日
regions: [jp]
wday: 1
week: 2
year_ranges:
from: 2022
- name: 振替休日
regions: [jp]
function: jp_health_sports_day_substitute(year)
- name: 即位礼正殿の儀
regions: [jp]
mday: 22
year_ranges:
limited: [2019]
11:
- name: 文化の日
regions: [jp]
mday: 3
- name: 振替休日
regions: [jp]
mday: 3
function: jp_substitute_holiday(year, month, day)
- name: 勤労感謝の日
regions: [jp]
mday: 23
- name: 振替休日
regions: [jp]
mday: 23
function: jp_substitute_holiday(year, month, day)
12:
- name: 天皇誕生日
regions: [jp]
mday: 23
year_ranges:
until: 2018
- name: 振替休日
regions: [jp]
mday: 23
function: jp_substitute_holiday(year, month, day)
year_ranges:
until: 2018
methods:
jp_health_sports_day_substitute:
arguments: year
ruby: |
Holidays::Factory::Definition.custom_methods_repository.find("jp_substitute_holiday(year, month, day)").call(year, 10, Holidays::Factory::DateCalculator.day_of_month_calculator.call(year, 10, 2, 1))
jp_vernal_equinox_day:
arguments: year
ruby: |
day =
case year
when 1851..1899
19.8277
when 1900..1979
20.8357
when 1980..2099
20.8431
when 2100..2150
21.8510
else
raise IndexError.new("Out of range")
end
day += 0.242194 * (year - 1980) - ((year - 1980)/4).floor
day = day.floor
Date.civil(year, 3, day)
jp_vernal_equinox_day_substitute:
arguments: year
ruby: |
date = Holidays::Factory::Definition.custom_methods_repository.find("jp_vernal_equinox_day(year)").call(year)
Holidays::Factory::Definition.custom_methods_repository.find("jp_substitute_holiday(year, month, day)").call(year, date.month, date.mday)
jp_marine_day_substitute:
arguments: year
ruby: |
Holidays::Factory::Definition.custom_methods_repository.find("jp_substitute_holiday(year, month, day)").call(year, 7, Holidays::Factory::DateCalculator.day_of_month_calculator.call(year, 7, 3, 1))
jp_national_culture_day:
arguments: year
ruby: |
day =
case year
when 1851..1899
22.2588
when 1900..1979
23.2588
when 1980..2099
23.2488
when 2100..2150
24.2488
else
raise IndexError.new("Out of range")
end
day += 0.242194 * (year - 1980) - ((year - 1980)/4).floor
day = day.floor
Date.civil(year, 9, day)
jp_national_culture_day_substitute:
arguments: year
ruby: |
date = Holidays::Factory::Definition.custom_methods_repository.find("jp_national_culture_day(year)").call(year)
Holidays::Factory::Definition.custom_methods_repository.find("jp_substitute_holiday(year, month, day)").call(year, date.month, date.mday)
jp_citizens_holiday:
arguments: year
ruby: |
ncd = Holidays::Factory::Definition.custom_methods_repository.find("jp_national_culture_day(year)").call(year)
if ncd.wday == 3
ncd - 1
else
nil
end
jp_mountain_holiday:
arguments: year
ruby: |
Date.civil(year, 8, 11)
jp_mountain_holiday_substitute:
arguments: year
ruby: |
date = Holidays::Factory::Definition.custom_methods_repository.find("jp_mountain_holiday(year)").call(year)
Holidays::Factory::Definition.custom_methods_repository.find("jp_substitute_holiday(year, month, day)").call(year, date.month, date.mday)
jp_respect_for_aged_holiday_substitute:
arguments: year
ruby: |
Holidays::Factory::Definition.custom_methods_repository.find("jp_substitute_holiday(year, month, day)").call(year, 9, Holidays::Factory::DateCalculator.day_of_month_calculator.call(year, 9, 3, 1))
jp_substitute_holiday:
arguments: year, month, day
ruby: |
date = Date.civil(year, month, day)
date.wday == 0 ? (Holidays::Factory::Definition.custom_methods_repository.find("jp_next_weekday(date)").call(date+1)) : nil
jp_next_weekday:
arguments: date
ruby: |
# This suuuucks. I have no idea how to make this not reach into our interal ruby API to do this.
# I'm punting, I'll come back to this.
is_holiday = Holidays::JP.holidays_by_month[date.month].any? do |holiday|
holiday[:mday] == date.day
end
date.wday == 0 || is_holiday ? (Holidays::Factory::Definition.custom_methods_repository.find("jp_next_weekday(date)").call(date+1)) : date
tests:
- given:
date: '2008-01-01'
regions: ["jp"]
options: ["informal"]
expect:
name: "元日"
- given:
date: '2010-01-11'
regions: ["jp"]
options: ["informal"]
expect:
name: "成人の日"
- given:
date: '2008-02-11'
regions: ["jp"]
options: ["informal"]
expect:
name: "建国記念の日"
- given:
date: '2008-04-29'
regions: ["jp"]
options: ["informal"]
expect:
name: "昭和の日"
- given:
date: '2008-05-03'
regions: ["jp"]
options: ["informal"]
expect:
name: "憲法記念日"
- given:
date: '2008-05-05'
regions: ["jp"]
options: ["informal"]
expect:
name: "こどもの日"
- given:
date: '2010-07-19'
regions: ["jp"]
options: ["informal"]
expect:
name: "海の日"
- given:
date: '2010-09-20'
regions: ["jp"]
options: ["informal"]
expect:
name: "敬老の日"
- given:
date: '2010-10-11'
regions: ["jp"]
options: ["informal"]
expect:
name: "体育の日"
- given:
date: '2008-11-03'
regions: ["jp"]
options: ["informal"]
expect:
name: "文化の日"
- given:
date: '2008-11-23'
regions: ["jp"]
options: ["informal"]
expect:
name: "勤労感謝の日"
- given:
date: '2008-12-23'
regions: ["jp"]
options: ["informal"]
expect:
name: "天皇誕生日"
- given:
date: '2010-03-22'
regions: ["jp"]
options: ["informal"]
expect:
name: "振替休日"
- given:
date: '2008-11-24'
regions: ["jp"]
options: ["informal"]
expect:
name: "振替休日"
- given:
date: '2012-01-02'
regions: ["jp"]
options: ["informal"]
expect:
name: "振替休日"
- given:
date: '2013-05-06'
regions: ["jp"]
options: ["informal"]
expect:
name: "振替休日"
- given:
date: '2014-05-06'
regions: ["jp"]
options: ["informal"]
expect:
name: "振替休日"
- given:
date: '2015-05-06'
regions: ["jp"]
options: ["informal"]
expect:
name: "振替休日"
- given:
date: '2019-08-12'
regions: ["jp"]
options: ["informal"]
expect:
name: "振替休日"
- given:
date: '2004-03-20'
regions: ["jp"]
expect:
name: "春分の日"
- given:
date: '2005-03-20'
regions: ["jp"]
expect:
name: "春分の日"
- given:
date: '2006-03-21'
regions: ["jp"]
expect:
name: "春分の日"
- given:
date: '2007-03-21'
regions: ["jp"]
expect:
name: "春分の日"
- given:
date: '2008-03-20'
regions: ["jp"]
expect:
name: "春分の日"
- given:
date: '2009-03-20'
regions: ["jp"]
expect:
name: "春分の日"
- given:
date: '2010-03-21'
regions: ["jp"]
expect:
name: "春分の日"
- given:
date: '2004-09-23'
regions: ["jp"]
expect:
name: "秋分の日"
- given:
date: '2005-09-23'
regions: ["jp"]
expect:
name: "秋分の日"
- given:
date: '2006-09-23'
regions: ["jp"]
expect:
name: "秋分の日"
- given:
date: '2007-09-23'
regions: ["jp"]
expect:
name: "秋分の日"
- given:
date: '2008-09-23'
regions: ["jp"]
expect:
name: "秋分の日"
- given:
date: '2009-09-23'
regions: ["jp"]
expect:
name: "秋分の日"
- given:
date: '2010-09-23'
regions: ["jp"]
expect:
name: "秋分の日"
- given:
date: '2011-09-23'
regions: ["jp"]
expect:
name: "秋分の日"
- given:
date: '2012-09-22'
regions: ["jp"]
expect:
name: "秋分の日"
- given:
date: '2013-09-23'
regions: ["jp"]
expect:
name: "秋分の日"
- given:
date: '2032-09-21'
regions: ["jp"]
expect:
name: "国民の休日"
- given:
date: '2049-09-21'
regions: ["jp"]
expect:
name: "国民の休日"
- given:
date: '2009-09-22'
regions: ["jp"]
expect:
name: "国民の休日"
- given:
date: '2015-09-22'
regions: ["jp"]
expect:
name: "国民の休日"
- given:
date: '2026-09-22'
regions: ["jp"]
expect:
name: "国民の休日"
- given:
date: '1996-07-20'
regions: ["jp"]
expect:
name: "海の日"
- given:
date: '2002-07-20'
regions: ["jp"]
expect:
name: "海の日"
- given:
date: '2003-07-21'
regions: ["jp"]
expect:
name: "海の日"
- given:
date: '2004-07-19'
regions: ["jp"]
expect:
name: "海の日"
- given:
date: '2005-07-18'
regions: ["jp"]
expect:
name: "海の日"
- given:
date: '2006-07-17'
regions: ["jp"]
expect:
name: "海の日"
- given:
date: '2007-07-16'
regions: ["jp"]
expect:
name: "海の日"
- given:
date: '2009-07-20'
regions: ["jp"]
expect:
name: "海の日"
- given:
date: '2013-07-15'
regions: ["jp"]
expect:
name: "海の日"
- given:
date: '2014-07-21'
regions: ["jp"]
expect:
name: "海の日"
- given:
date: '2019-07-15'
regions: ["jp"]
expect:
name: "海の日"
- given:
date: '2020-07-20'
regions: ["jp"]
expect:
holiday: false
- given:
date: '2020-07-23'
regions: ["jp"]
expect:
name: "海の日"
- given:
date: '2021-07-22'
regions: ["jp"]
expect:
name: "海の日"
- given:
date: '2016-08-11'
regions: ["jp"]
expect:
name: "山の日"
- given:
date: '2017-08-11'
regions: ["jp"]
expect:
name: "山の日"
- given:
date: '2018-08-11'
regions: ["jp"]
expect:
name: "山の日"
- given:
date: '2019-08-11'
regions: ["jp"]
expect:
name: "山の日"
- given:
date: '2020-08-10'
regions: ["jp"]
expect:
name: "山の日"
- given:
date: '2020-08-11'
regions: ["jp"]
expect:
holiday: false
- given:
date: '2021-08-08'
regions: ["jp"]
expect:
name: "山の日"
- given:
date: '2021-08-09'
regions: ["jp"]
expect:
name: "振替休日"
- given:
date: '2022-08-11'
regions: ["jp"]
expect:
name: "山の日"
- given:
date: '2015-08-11'
regions: ["jp"]
expect:
holiday: false
- given:
date: '1998-09-22'
regions: ["jp"]
expect:
holiday: false
- given:
date: '2018-12-23'
regions: ["jp"]
expect:
name: "天皇誕生日"
- given:
date: '2019-02-23'
regions: ["jp"]
expect:
holiday: false
- given:
date: '2019-12-23'
regions: ["jp"]
expect:
holiday: false
- given:
date: '2020-02-23'
regions: ["jp"]
expect:
name: "天皇誕生日"
- given:
date: '2019-10-14'
regions: ["jp"]
expect:
name: "体育の日"
- given:
date: '2020-07-24'
regions: ["jp"]
expect:
name: "スポーツの日"
- given:
date: '2020-10-12'
regions: ["jp"]
expect:
holiday: false
- given:
date: '2021-07-23'
regions: ["jp"]
expect:
name: "スポーツの日"