トップ > Perl Tips > カレンダーを作ろう


 ■ カレンダーを作ろう

基礎編(曜日の求め方):曜日 ~Zeller(ツェラー)の公式~

今回はカレンダーを作ります。
カレンダーといっても、「万年カレンダー」で、ずっと使えるものです。
「ツェラーの公式」を応用させます。

<サンプル>
スクリプトが少々長くなりますので、こちらをご覧ください。

<解説>

・月の末日の指定
配列変数に代入します。

・デコード
年月を受け取るときに使います。
後ほど出ますが、「先月」「来月」のリンクから受け取るものです。

・現在の日時を取得 ~ 指定されていた日時を変数に代入
日時を取得した後に、表示する年月が別に指定されていれば、
年($year)と月($month)の数字を置き換えます。

・うるう年の判定
「4の倍数ならうるう年、しかし100の倍数ならうるう年でない、また400の倍数ならうるう年」
という一般的なルールを使います。
もし、うるう年であれば、2月を29日に設定します。

・月の初日の曜日、月の末日を取得
ここで「ツェラーの公式」を使います。
下にサブルーチンとして作ってあります。

"wday"サブルーチン
ここで、「ツェラーの公式」を使い、曜日を求めます。

・月の初日の前まで、表のセルにスペース(改行)を入れる
お手元にあるカレンダーを見ていただくとわかりますが、
1日の前が空白になっていますよね。
それを作っています。

・カレンダーのセルを作成
ここが本題です。
最後の日まで数字を入れますが、
土曜日まで進んだら、次の行に進まなくてはなりません。
</TR>という、表の行を終了させるタグを使います。
最終日まで入れましたら、最後のセルにも空白を入れます。

・先月、来月のリンクを作成
現在表示している月の数から1を足したり引いたりするだけではいけません。
1月のときは引いてしまうと0になり、
12月のときは足してしまうと13になります。
このように、ありえない月にならないように、
「先月の数字が0(今月が1月)になったら、去年の12月にする。」
「来月の数字が13(今月が12月)になったら、来年の1月にする。」
このようにしてあります。


実際のサンプルはこちらです。




トラックバック

このエントリーのトラックバックURL:
http://easycgi.xrea.jp/mt-tb.cgi/46