Panda Noir

JavaScript の限界を究めるブログでした。最近はいろんな分野を幅広めに書いてます。

カレンダーを扱いやすくするライブラリfilendarを作りました

filter + calendarでfilendarです。

ある月の平日を求めるプログラムや、ある日が国民の休日であるか判定するプログラムなどを記述するためのJavaScriptライブラリです。

使い方

github.com

ここからダウンロードしてきて、 npm i & npm run build してください。

サンプルコードはこんな感じです

const {SUN, SAT, MON} = Calendar;
const {or, day, nthDay, weekday} = Calendar.filter;

new Calendar.Year(2016).filter(or(day(SUN), day(SAT))); // 2016年のうち、土曜日であるもしくは日曜日である日を羅列する
new Calendar.Month(2016, 11 - 1).filter(weekday()); // 2016年11月の平日を羅列する
new Calendar.Month(2016, 11 - 1, 28).is(nthDay(4, MON)); // 2016年11月28日が4番目の月曜日であるかを判定する

このように、好きな年、または月に含まれる日をフィルタして絞り込むことができます。

現在、サポートしているフィルタは以下の通りです

  • 祝日に関するもの(newYearsDay(), showaDay()など)
  • 年や月に関するもの(year(), month(), date()など)
  • フィルタに対し論理演算をするもの(and(), or(), not(), nand(), nor())
  • 期間を示すもの(since(), until(), range())
  • 複合的なもの(weekday(), publicHoliday(), substituteHoliday())

また、自身でカスタムフィルタを作ることもできます。

const fizz = () => _date => _date.getDate() % 3 === 0; // 日が3の倍数である、というカスタムフィルタ
const buzz = () => _date => _date.getDate() % 5 === 0; // 日が5の倍数である、というカスタムフィルタ
new Calendar.Month(2016, 3 - 1).filter(fizz()); // 3月のうち、3の倍数である日を列挙
new Calendar.Month(2016, 3 - 1).filter(buzz()); // 3月のうち、5の倍数である日を列挙