重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

perlでカレンダーを表示させるというプログラムを作っています。そこでテキストボックスをつけて入力された年と月のカレンダーを表示させたいのですがどのうように手をつけてよいのかまったくわかりません。
どんな風に作っていけばいいのでしょうか?

A 回答 (2件)

カレンダーはなかなか難しいです。

ぼくも縦軸に曜日がそろう型のカレンダーを作りましたが、プログラミングに約二三週間かかりました。実際の構想にはもっと時間がかかりました。(学生なので、時間がないとは言えども、半年くらいかかった。)
まず、自己流今月のカレンダーの作り方。

・今の月の1日の曜日を調べる。
・配列に空白の曜日に0を入れる
 例:今月の1日が金曜日(5)なら日曜日(0)との空白分、0を5つ配列に追加。
 曜日は日曜日の0に始まり、土曜日の6で終わるとする。
・最終日までの日数を、配列に追加
 例:6月は30日まであるので、配列に1~30を入れる。
結果、今月は0,0,0,0,0,1,2,3,4,5,……,28,29,30というデータが、配列に入る。

ここまでで一つの自作関数とします。
で、後はカレンダーの描写ですが、上の関数の結果(カレンダーの数字)が、配列[@kal]に入っているとすると
for(;@kal;){#ループA
for($n=0;$n<=6;++$n){#ループB
$d = shift(@kal);#数字を取り出す。
if($d==0){$d=" ";}else{}#0の場合、空白代入
printf("%3s",$d);#出力C
}
}
このようにすれば、カレンダーが描けます。配列の最初に(日,月,火,水,木,金,土)の値を入れれば、一番上に曜日まで入って、さらにカレンダーになります。
HTML出力させるなら、ループAの外側に<table>を、ループBの外側に<tr>を、そして出力Cの数字を囲むように<td>を配置すれば、テーブルになります。

問題は、指定した年と月からカレンダーを作成すること。
上の関数で、今月の1日の曜日が分かればカレンダーができるようになったので、後は指定した○年○月1日の曜日が分かれば、後は同じように出来ます。
つまり、その日まで、今日から何日前なのか、後なのかを計算等々で導き、その日数*24*60*60で、その日までの秒数を出し、それをtime()関数の中に放り込んでやればいいです。

ここと一つ上の質問の内容からして、あなたは恐らく初心者ですね?
いい機会です。今から何日前が、求めたい○年○月の1日になるか、悪戦苦闘してください。きっと、ifの不等号に=があるかないかの大切さがよく分かります。
一応ヒントを出しておきます。一年かけてでもいいので、やる価値のあるプログラムです。
・time()の中に、+の値を入れると、未来の時間が分かる。-なら過去。
・時間は、秒単位で考える。つまり、○日前の時間情報が知りたいなら、日数(○)×24時間×60分×60秒で出る。
・二月にはうるう年がある。うるう年は、西暦が『4で割り切れる』ものであり、『100で割り切れたらだめ』で『400で割り切れる場合はいい』という条件がある。

ちなみに、ぼくは@kalを出力するのに、大体100行くらい使ってます。まぁ、空行とかもありますけど。
    • good
    • 0
この回答へのお礼

ありがとうこざいました。

お礼日時:2007/06/08 11:29

ご質問が漠然としているのでお答えしづらいところです。



http://tackysroom.com/cgi_annecho.htm
等で勉強されてはいかがですか?

この回答への補足

もう少し詳しく言いますと、
UNIX環境でカレンダーを表示させるためにどんなcgiを作っていいのかがわからないのとそれを表示するときにどのようなhtmlのタグを入力するればいいのかがわからないんです。

補足日時:2007/06/06 22:05
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!