Provides utilities to manipulate japanese holidays.
JavaScript CoffeeScript Makefile
Switch branches/tags
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
lib
src
test
.gitignore
.travis.yml
LICENSE
Makefile
README.md
index.js
package.json

README.md

japanese-holidays-js Build Status

NPM

日本の休日を JavaScript で計算するためのライブラリです。

ソースは coffeescript で書かれており、それをコンパイルした物が lib に入っています。 ご利用の際には lib 内の japanese-holidays.js や japanese-holidays.min.js を使ってください。

lib/ 以下のファイルは自動生成された物です。これらを編集しないようにしてください。

Use with Node

$ npm install japanese-holidays

Use on the Web

<script src="https://cdn.rawgit.com/osamutake/japanese-holidays-js/v1.0.6/lib/japanese-holidays.min.js"></script>

使い方

JapaneseHolidays.isHoliday(date, furikae = true)

指定された日が休日かどうかを判定して、休日ならその名前を返します。

休日でなければ null を返します。

furikae に false を指定すると振替休日を除きます。

内部ではキャッシュした値を使って計算するため繰り返し呼ぶ際にはとても高速に動作します。

Node:

// デバッグ用のソースマップサポート
// 例外発生時に CoffeeScript の行番号を出すことができる
require('source-map-support').install();

// ここからが本文
var JapaneseHolidays = require('japanese-holidays');

var today = new Date();
var holiday = JapaneseHolidays.isHoliday(today);
if(holiday) {
    console.log("今日は " + holiday + " です");
} else {
    console.log("今日は祝日ではありません");
}

On the web:

<script src="https://cdn.rawgit.com/osamutake/japanese-holidays-js/v1.0.6/lib/japanese-holidays.min.js"></script>
<script>
var today = new Date();
var holiday = JapaneseHolidays.isHoliday(today);
if(holiday) {
    alert("今日は " + holiday + " です");
} else {
    alert("今日は祝日ではありません");
}
</script>

JapaneseHolidays.getHolidaysOf(year, furikae = true)

指定された年の休日を配列にして返します。

配列には {month: m, date: d, name: s} の形で表わされた休日が日付順に並びます。

furikae に false を指定すると、振替休日および国民の休日を除きます。

Node:

// デバッグ用のソースマップサポート
// 例外発生時に CoffeeScript の行番号を出すことができる
require('source-map-support').install();

// ここからが本文
var JapaneseHolidays = require('japanese-holidays');

var today = new Date();
var holidays = JapaneseHolidays.getHolidaysOf( today.getFullYear() );
holidays.forEach(function(holiday) {
    console.log(
        today.getFullYear() + "" +
        holiday.month + "" + 
        holiday.date + "日は " +
        holiday.name + " です"
    );
});

On the web:

<script src="https://cdn.rawgit.com/osamutake/japanese-holidays-js/v1.0.6/lib/japanese-holidays.min.js"></script>
<script>
var today = new Date();
var holidays = JapaneseHolidays.getHolidaysOf( today.getFullYear() );
holidays.forEach(function(holiday) {
    document.write(
        today.getFullYear() + "" +
        holiday.month + "" + 
        holiday.date + "日は " +
        holiday.name + " です<br>"
    );
});
</script>

Properties

  • month: Integer - 月 (1~12)
  • date: Integer - 日 (1~31)
  • name: String - 休日名

春分・秋分の求め方について

春分・秋分の日は年によって日付が異なります。

この理由は、暦の上での1年の長さが閏年分だけ等間隔にならないため、 本来ほぼ正確に等間隔でやってくる春分・秋分の日付がカレンダー上でずれてしまうためです。 とはいえ、春分・秋分の間隔も完全に等間隔ではなく、毎年少しずつ揺れ動くようです。

Wikipedia の 春分秋分 のページに 1600年~2399年 のデータがあって、そこから周期を求めることで、 春分についてはすべての範囲で計算と実測とが一致しました。秋分については ふらつきが大きいようで、計算だけではどうしても一致しなかったため、 いくつかの値についてのみ個別に指定しています。

結果として、1600年~2399年 の範囲で上記 Wikipedia のページにあった日付を 再現できています。

タイムゾーンについて

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 が休日かどうかが判定されます。

License

MIT