(祝日・和暦・営業日計算対応) 日付モジュール


# はじめに

日付まわりの処理は、計算が面倒な日本の年号・祝日・営業日の計算などありますね。
そこで、それらに対応したモジュールを作成したので提供します
クライアントサイドでもnodeでも使用することができます

  + [github](https://github.com/yukik/koyomi)
  + nodeでインストール `npm install koyomi`
  + クライアントコード [コピー元](https://raw.githubusercontent.com/yukik/koyomi/master/public/koyomi.min.js)

MITライセンスなので、そのままとか一部だけ切り取って参考にされるとか自由にしてもらってOKです。

# 使用方法

## フォーマット

`{String} koyomi.format ({Date|String} date, {String} format)`  

```
koyomi.format('2015-4-27', 'Y/M/D');  // '2015/4/27'
```

その他のパラメータ文字列(フォーマットのYやMなど)は[docs/format.md](https://github.com/yukik/koyomi/blob/master/docs/format.md)で確認してください

# 和暦

和暦は年区切りと日付区切りの両方をサポートしています

| 年号 | 年区切りの期間 | 日付区切りの期間      |
|------|--------------- |-----------------------|
| 平成 | 1989年-        | 1989/01/08-           |
| 昭和 | 1926年-1988年  | 1926/12/25-1989/01/07 |
| 大正 | 1912年-1925年  | 1912/07/30-1926/12/24 |
| 明治 | 1868年-1911年  | 1868/01/25-1912/07/29 |

```
koyomi.format('2015-4-27', 'GGN年M月D日');  // '平成27年4月27日'
```

1868年から明治ですが、グレゴリオ歴の導入は1873年（明治6年）以降のため、それ以前は和暦は旧暦のこよみになります。
そのため、1872年以前で和暦の変換を行うと西暦表示になります

# 祝日

祝日は、1948年7月20日に施行された祝日法に基づき計算されています
祝日データは2015年4月29日時点で決定されているものが反映されています
（2016年から新しく施行される山の日まで)

祝日を得ることは、フォーマットとは別に行いたい場合があるかもしれせん
ある年の祝日の一覧を取得したい場合は次でできます

```
koyomi.getHolidays(2015);
/*
 {
  '101': '元日',
  '112': '成人の日',
  '211': '建国記念の日',
  '321': '春分の日',
  '429': '昭和の日',
  '503': '憲法記念日',
  '504': 'みどりの日',
  '505': 'こどもの日',
  '506': '振替休日',
  '720': '海の日',
  '921': '敬老の日',
  '922': '国民の休日',
  '923': '秋分の日',
  '1012': '体育の日',
  '1103': '文化の日',
  '1123': '勤労感謝の日',
  '1223': '天皇誕生日'
 }
*/

```

# 営業日

営業日の計算も簡単にできます

```
koyomi.addBiz('2015-5-5', 1); // 2015-5-7
```

初期設定は次のようになっていますが、変更することも可能です
詳しくは[設定値](https://github.com/yukik/koyomi/blob/master/docs/config.md)を参照してください

  + 日本の祝日を適用
  + 土日を定休日とする
  + 年末年始は12/29-1/3を休業日とする

# ドキュメント一覧

その他ここでは説明しきれなかった機能は下記のドキュメントにまとめてあります

  + [イントロダクション README.md](https://github.com/yukik/koyomi/blob/master/README.md)
  + [設定値 docs/config.md](https://github.com/yukik/koyomi/blob/master/docs/config.md)
  + [フォーマット docs/format.md](https://github.com/yukik/koyomi/blob/master/docs/format.md)
  + [日時の情報取得・操作 docs/calc-date.md](https://github.com/yukik/koyomi/blob/master/docs/calc-date.md)
  + [営業日計算 docs/calc-biz.md](https://github.com/yukik/koyomi/blob/master/docs/calc-biz.md)
  + [カレンダー情報 docs/calendar.md](https://github.com/yukik/koyomi/blob/master/docs/calendar.md)
  + [祝日 docs/holiday.md](https://github.com/yukik/koyomi/blob/master/docs/holiday.md)
  + [営業・休業 docs/open-close.md](https://github.com/yukik/koyomi/blob/master/docs/open-close.md)
  + [補助関数 docs/helper.md](https://github.com/yukik/koyomi/blob/master/docs/helper.md)

# 最後に

一度はクラス化しましたが、逆に使い勝手が悪かったので、単なるオブジェクトになりました

本当に何番煎じだよってくらいに同じようなことをやっている人は多いと思いますが、年号、祝日、営業日が一緒になったものは少ないかもしれません
それからパラメータ文字列を追加したり、カスタマイズし易いように工夫しました
parameter.jsにまとめてあるので新しいものをすぐに追加できます
ライセンスはMITなので自由に改変してください
[moment.js](http://momentjs.com/)のようなDate代替タイプを好む人もいると思います。
しかしkoyomiではその形は採用しませんでした。
日付にこだわらず暦全体を取り扱う形なので、今後機能拡張がしやすいんではないかな？と思っています。

自分のプロジェクトではやたらと帳票が絡むこと多くて、日付の処理を一回ちゃんと作っておきたくこんなものできました。
不具合あったらこちら[issues](https://github.com/yukik/koyomi/issues)へお願いします

# 修正履歴

+ 和暦の入力に対応 (4/28)
+ 祝日に対応(4/29)
+ 営業日計算に対応(5/1)
+ npmに公開(5/1)
+ カレンダーデータの取得に対応(5/4)
+ カレンダーのサンプルを追加(5/4)
+ パラメータ文字列を一新(5/17)
+ クラス化し、さらに多機能に(5/17)
+ オブジェクト化し、大幅に変更を加えた(12/6)

詳しくはChangeLog.mdに