西向く侍!?

あけましておめでとうございます。 
年が明けると、皆さんの中で新しいカレンダーに変えられる方も多いと思います。
ということで、今回はカレンダーについて、JavaScriptでどんな実装方法があるかなどを一部紹介できたらと思います。

では、今回は2通りの実装方法をご紹介したいと思います。 
1.「Datepickerプラグイン」のテンプレートを使って、素早く実装しよう 
2.「dateオブジェクト」を使って、自分だけのカレンダーを作成しよう  

Datepickerで実装したカレンダー 

Dateオブジェクトを使って作成したカレンダー 

1.「Datepickerプラグイン」のテンプレートを使って、素早く実装しよう 

「Datepicker?プラグイン?それって何?」という疑問を皆さんは持たれたと思います。 
まずプラグインとは、ソフトウェアの機能を拡張するためのプログラムで、「拡張機能」と呼ばれたりもします。
Datepickerとはそんなプラグインの一つで、JavaScriptにカレンダーを作れる機能を拡張してくれるプログラムのことを言います。
これを導入することでテンプレートのカレンダーを使うことができます。 

2.「dateオブジェクト」使って、自分だけのカレンダーを作成しよう 

こちらの方法では、関数を使った計算を行い、カレンダーを作成するというものです。
こちらはDatepickerとは違い、デザインを自分好みに変更しやすい利点があります。 

「関数自体何かわからない」という人向けに例えると、自販機があるとします。
お金を1000円入れて、120円のジュースのボタンを押しました。
選んだジュースとお釣りの880円が返ってきました。
これを関数的に考えると、1000円の支払い金額という情報と120円のジュースという商品情報を計算するための値として設定し、
これらの情報を式にセットすると、選ばれたジュースとお釣りを返すという計算を行うのが関数です。 

Dateオブジェクトとは何かも解説したいと思います。 
Dateオブジェクトとは日付や時刻を扱うためのもので、「new Date()」とすることで現在の日付と時刻を取得することができます。
これには他にも使用方法があり、「new Date(year)」などとするとyearに指定した年の日付を取得できたりします。 

今回は関数にDateオブジェクトを使用し、2025/1のカレンダーを作っていこうと思います。 
では、複数のステップに分けて作成していきたいと思います。 

1. カレンダー形式の多次元配列を返す関数を定義します。

多次元配列を作る際に、まずヘッダー部分となるものとして、 
日曜日から始まり土曜日で終わる「週」を設定します。配列の横の部分として扱います。

2.カレンダー形式の多次元配列で使用する値は、すべてDateオブジェクトで取得します。

例えば、「new Date(2025,1)」で取得すると「2025-01-01 0:00:00.000」が取得できるため、 
このオブジェクトを引数(今回はtodayを使用します。)に入れることで、
「today.getDate()」を使って日付を取得し、日付を再現させていきます。次の日だと+1などしていくことで 再現可能です。 

3. 画面に表示するときは関数から受け取った配列をループで展開して画面に表示します。 

意識することは以下となります。 
1月の例では、一週目は30,31,1,2,3,4で、2週目は6,7,8,9,10,11のようにループさせていきます。 
別の月のカレンダーを作成する場合は以下を参照してください。 

1ヶ月が31日の配列:[1, 3, 5, 7, 8, 10, 12] 
1ヶ月が30日の配列:[4, 6, 9, 11] 
それ以外の配列  :[2] 

月の閏年に関して、西暦を4で割れる月は29を、割れない月は28まで作ります。 
ここで更に気を付けたいのが、閏年は100年に一度29にならず、400年に一度29になるという点にも気を付けましょう。 
他にも、月の日数が31までない月である2、4、6、9、11の覚え方として、”にしむく士”というワードがあります。
に(2)し(4)む(6)く(9)士(11)と語呂を合わせるらしく、士がなぜ11なのかは、11を漢字で書いた際に十一になるからだそうです。

以上が、JavaScriptで使えるカレンダーの紹介でした。 

皆さんは普段どのようなカレンダーを使っていますか?私は日めくりカレンダーを使っています。
カレンダーだけでも色々な種類のものがあって面白いですよね。
実は、紹介したものでもアレンジを加えれば日めくりカレンダーのようなものにも出来ちゃいます。
皆さんも是非色んなカレンダー制作を試してみてください。 

最後まで読んでくださりありがとうございます。