ソフトウェア/javascript/japanese-holidays の履歴(No.6)
更新日本の休日を求めるための javascript ライブラリを npm と github へ公開しました†
祝日名が取れて、なおかつメンテナンスしやすい形の ライブラリが見付からなかったので書いてみました。
一応、複数のライブラリと突き合わせて齟齬がないことを確認しましたが、 運用は個々の責任でお願いします。ミスがあれば教えてください。
法律改正などで休日が変更になっても、よほどのことがない限り definition のところをいじるだけで対応できるはずです。
もともとこのライブラリは 2013 年に書かれた物です。 2016年から 「山の日」 が新設されましたが、これに対するコードの追加は、
[ "山の日", simpleHoliday( 8, 11), 2016 ],
の一行だけで済みました。
ライセンスは MIT です。 煮るなり焼くなり好きにしてください。
使い方†
npm を使うなら、
$ npm i japanese-holidays
$ node
> Holidays = require('japanese-holidays');
> Holidays.getHolidaysOf(2016);
[ { month: 1, date: 1, name: '元日' },
{ month: 1, date: 11, name: '成人の日' },
{ month: 2, date: 11, name: '建国記念の日' },
{ month: 3, date: 20, name: '春分の日' },
{ month: 3, date: 21, name: '振替休日' },
{ month: 4, date: 29, name: '昭和の日' },
{ month: 5, date: 3, name: '憲法記念日' },
{ month: 5, date: 4, name: 'みどりの日' },
{ month: 5, date: 5, name: 'こどもの日' },
{ month: 7, date: 18, name: '海の日' },
{ month: 8, date: 11, name: '山の日' },
{ month: 9, date: 19, name: '敬老の日' },
{ month: 9, date: 22, name: '秋分の日' },
{ month: 10, date: 10, name: '体育の日' },
{ month: 11, date: 3, name: '文化の日' },
{ month: 11, date: 23, name: '勤労感謝の日' },
{ month: 12, date: 23, name: '天皇誕生日' } ]
> Holidays.isHoliday(new Date(2016,3-1,20));
'春分の日'
> Holidays.isHoliday(new Date(2016,3-1,21));
'振替休日'
npm を使わないなら、
https://cdn.rawgit.com/osamutake/japanese-holidays-js/v1.0.6/lib/japanese-holidays.js
を読み込めば JapaneseHolidays に必要な関数が入ってきます。
<script src="https://cdn.rawgit.com/osamutake/japanese-holidays-js/v1.0.6/lib/japanese-holidays.js"></script>
<script>
alert( JapaneseHolidays.isHoliday(new Date(2016,3-1,20)) );
</script>
さらにちゃんとした例をこちらに置きました。
http://jsbin.com/qicazaroxu/edit?js,output
リンク先では上記ライブラリを使って休日入りのカレンダーを表示しています。
休日の上にマウスカーソルを置くと、休日名がツールチップとして表示されるはずです。
(下はスクリーンキャプチャーですので表示されている休日名は変化しません)
タイムゾーンについて†
JapaneseHolidays.isHoliday は与えられた「時刻」ではなく「日付」を元に祝日を判定します。 例えばニュージーランドで
JapaneseHolidays.isHoliday(new Date(2016,3-1,8));
とすると、ニュージーランド時間の 2016-03-08 00:00:00 が関数に渡されます。 これは日本時間では 2016-03-07 21:00:00 を表しますが、 isHoliday は与えられた日付 3/8 が休日かどうかを判定するということです。
多くの場合これは利用者の意図するところだと思います。
万一、与えた「時刻」において日本で休日かどうかを判定する必要があれば、
JapaneseHolidays.isHolidayAt(new Date(2016,3-1,8));
を呼んでください。例えばニュージーランドでこれを呼べば、3/7 が休日かどうかが判定されます。
2019年の改元に対応するためアップデート (v1.0.7)†
普段やり慣れないことで手順を思い出す(調べる)のにとても苦労したためメモしておく。
- GitHub でプルリクエストをマージした
- ローカルに git clone した
- npm install した
- 必要部分を修正して make test が通るようにした
- package.json のバージョン番号を 1.0.7 にした
- README.md のバージョン番号相当部分を 1.0.7 にした
- git push した
- GitHub でリリースを作成した
- npm adduser でログイン情報を登録した
- npm publish した
コメント・質問・バグ報告†
できれば github の方へお願いします。日本語で結構です。
https://github.com/osamutake/japanese-holidays-js/issues
よく分からなければここでも構いません。