holidays gem は各国の祝日を調べられる便利な gem です。これに、独自の祝日を追加します。
以下は Rails でやる場合のファイルパスですが、Rails でなくてもできるはずです。
config/holidays.yaml
months:
1:
- mday: 2
name: 元旦翌日
regions: [jp]
- mday: 3
name: 元旦翌々日
regions: [jp]
12:
- mday: 30
name: 大晦日前日
regions: [jp]
- mday: 31
name: 大晦日
regions: [jp]
config/initializers/custom_holidays.rb
# HACK: Load Japanese holidays first so that it will be merged with the custom holidays.
require 'generated_definitions/jp.rb'
# Load custom holiday definitions.
Holidays.load_custom(Rails.root.join('config', 'holidays.yml'))
Holidays.load_custom
で独自の祝日定義を追加できるのですが、これをいきなり呼んでしまうとデフォルトのとマージされず、独自の祝日定義だけになってしまいます。この例で言うと、年間の祝日がたったの 4 日になってしまうということです。恐ろしいですね。
これは holidays
gem が各国の祝日定義を必要になった時に読み込んでいることに起因しています。いきなり独自の祝日定義をしてしまうと、その後 Holidays.on
などを呼んだ時に :jp
の祝日定義もうあるから読み込まなくていいや、となり、デフォルトの祝日定義が読み込まれません。そこで Holidays.load_custom
の前に require 'generated_definitions/jp'
としてデフォルトの祝日定義を読み込んでおくのです。
もちろん他の国の祝日を追加したい時は、対応する region code を require
します。