ソフトウェア/javascript/japanese-holidays のバックアップ(No.4)

更新


公開メモ

日本の休日を求めるための javascript ライブラリを npm と github へ公開しました

祝日名が取れて、なおかつメンテナンスしやすい形の ライブラリが見付からなかったので書いてみました。

一応、複数のライブラリと突き合わせて齟齬がないことを確認しましたが、 運用は個々の責任でお願いします。ミスがあれば教えてください。

法律改正などで休日が変更になっても、よほどのことがない限り definition のところをいじるだけで対応できるはずです。

もともとこのライブラリは 2013 年に書かれた物です。 2016年から 「山の日」 が新設されましたが、これに対するコードの追加は、

LANG: javascript
   [ "山の日",                   simpleHoliday( 8, 11), 2016       ],

の一行だけで済みました。

ライセンスは MIT です。 煮るなり焼くなり好きにしてください。

使い方

npm を使うなら、

LANG:console
$ 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 に必要な関数が入ってきます。

LANG:javascript
<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

リンク先では上記ライブラリを使って休日入りのカレンダーを表示しています。

休日の上にマウスカーソルを置くと、休日名がツールチップとして表示されるはずです。
(下はスクリーンキャプチャーですので表示されている休日名は変化しません)

calendar.png

タイムゾーンについて

JapaneseHolidays.isHoliday は与えられた「時刻」ではなく「日付」を元に祝日を判定します。 例えばニュージーランドで

LANG:javascript
JapaneseHolidays.isHoliday(new Date(2016,3-1,8)); 

とすると、ニュージーランド時間の 2016-03-08 00:00:00 が関数に渡されます。 これは日本時間では 2016-03-07 21:00:00 を表しますが、 isHoliday は与えられた日付 3/8 が休日かどうかを判定するということです。

多くの場合これは利用者の意図するところだと思います。

万一、与えた「時刻」において日本で休日かどうかを判定する必要があれば、

LANG:javascript
JapaneseHolidays.isHolidayAt(new Date(2016,3-1,8)); 

を呼んでください。例えばニュージーランドでこれを呼べば、3/7 が休日かどうかが判定されます。

コメント・質問・バグ報告

できれば github の方へお願いします。日本語で結構です。
https://github.com/osamutake/japanese-holidays-js/issues

よく分からなければここでも構いません。





Counter: 7662 (from 2010/06/03), today: 3, yesterday: 0