このページはSSIを使用しています。Isweb以外のサイトから直接このページにアクセスされた場合、正しくSSIが動作できません(Iswebでは他サイトから直接CGIなどの呼び出しを禁止しているため)。ここを押して正しく表示できるようにしてください。
[an error occurred while processing this directive]
[an error occurred while processing this directive]

カレンダー de ココ


CGIを実行します年月日や曜日・時刻の取得」では、現在の年月日や時刻を扱うlocaltime関数の説明をしました。このページではlocaltime関数を使ってカレンダーを作ってみます。このページの下では calender.cgiのスクリプトを表示できるようにリンクしておきました。スクリプトにはコメントを多くしておきましたので参照してください。

 CGIを実行しますカレンダー表示


この CGI はスクリプト本体(calender.cgi)とデータ部分(data_yearly.datとdata_monthly.dat)からなっています。

データ部分
data_yearly.datはこのように、data_monthly.datはこのようになっています。data_yearly.datは
1;1;元旦;1
のように 年・月・表示用文字・休日フラグ からなっています。月日で固定できる休日等のデータを書き入れてください。

またdata_monthly.datは
25;給料日;0
のように 日・表示用文字・休日フラグ からなっています。毎月、日付で固定できるデータです。

年・月のデータ共に、行の先頭に#がある場合はデータを無視して読み飛ばします。また休日フラグは 1 が休日で、 0 は通常の日として扱います。休日は背景色を平日と変えてあります。

月日で固定できない「秋分の日」などや、曜日で変化する「体育の日」などはスクリプト本体で定義しています。

スクリプト本体
表示の初期設定は当月のカレンダーです。最上部の選択フォームで、年(今年の10年前〜10年後)、月、カレンダー表示開始の曜日(初期設定日曜日)、空白部分の写真表示有無(初期設定有り)を選択できます。その他翌月と前月へのリファーもつけてあります。

初期設定(1)でテーブルのサイズや日付・曜日の文字サイズ、曜日ごとの背景色を定義してありますので、自由に変更できるようになっています。

data_yearly.dat や data_monthly.dat では取得できない祝日にも対応しています。2000年から施行の「国民の祝日に関する法律」(いわゆる「ハッピーマンデー」)により、成人の日は1月の第2月曜日、体育の日は10月の第2月曜日となりましたので2000年以降かどうかで判断しています。また憲法記念日(5月3日)と国民の休日(5月4日)以外の祝日が、日曜の場合は翌日の月曜日が振替休日となりますので、これも算出しています。

また年毎に変化する春分の日は
int(20.8431 + 0.242194 * (年 - 1980) - int((年 - 1980) / 4))
秋分の日は
int(23.2488 + 0.242194 * (年 - 1980) - int((年 - 1980) / 4))
から算出しています。
【→Perl Reference: int

閏年は
(年 % 4 == 0 && 年 % 100 != 0) || 年 % 400 == 0
で求めています(% は剰余、割り算の余り)。4で割り切れるが100で割り切れなく、かつ400で割り切れる年となります。


【→Perl Reference: time
【→Perl Reference: localtime

calender.cgi のスクリプトが長いので、このページには表示しません。下に calender_cgi.txt として表示できるようにしておきましたので参考にしてください。ご自分のPCで試されるときはcalender.cgi と名前を変えてください。サーバに移されるときは、パーミッションを757にする必要があります。

その他に年データと月データもお忘れないように。calender.cgi と同じディレクトリに置いてください。

calender_cgi.txt(本体)
data_yearly.dat(年データ)
data_monthly.dat(月データ)


| Back | Coco's Home | ココとPerlで遊びませんか |

Copyright 2001-2002 Coco's Home. All rights reserved.