- 締切済み
カレンダー作成
普通のカレンダーみたいなものを作成したいのですが、例えば今月の頭って月曜日ですよね? それの前の日曜日の枠を作成したいのですが方法がわかりません。 どのようにすればいいのでしょうか? for($i=0;$i<$last;$i++){#●テーブル作成 @weekarray = ('日','月','火','水','木','金','土'); $first = $year.$mon.$day-($day-1); $calender = $first+$i; $youbi_master = getwday($calender_year,$calender_mon,1,1); $calender_year = substr($calender,0,4); $calender_mon = substr($calender,4,2); $calender_day = substr($calender,6,2); $calender_search = $calender_year."/".$calender_mon."/".$calender_day; $calender_youbi = getwday($calender_year,$calender_mon,$calender_day); open(FILE,"log.log"); @log = <FILE>; close(FILE); $gyou = @log; $w = 0; while($w<$gyou){ @log_line = split(/<>/,$log[$w]); $HIDUKE = $log_line[0]; $TITLE = $log_line[1]; $NAKAMI = $log_line[2]; if($calender_youbi == 0){#----------<日曜日だったら if($w == $gyou-1){ print "<TR><TD WIDTH=100 CLASS=TD1>$calender_search <B>$flag_sun $flag</B></TD>\n"; $flag_sun = $flag_sun+1; $flag = $flag +1; } } elsif($calender_youbi == 6){#----------<土曜だったら if($w == $gyou-1){ print "<TD WIDTH=100 CLASS=TD1>$calender_search</TD></TR>\n"; } } else {#----------<その他の曜日 if($w == $gyou-1){ print "<TD WIDTH=100 CLASS=TD1>$calender_search</TD>\n"; } }#曜日による分岐終了 $w++; }# while }# ●テーブル作成for終了
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- leaz024
- ベストアンサー率75% (398/526)
カレンダーの月始めに存在する余白の数は、ちょうど「ついたち」の曜日の値(0~6)と同じ数ですので、その分をスキップすればよいことになります。 この余白数を含む日付配列を用意し、1週間ずつ書いていくのが簡単でしょう。 (1週間ずつ書くことで、月末日以降の余白は考えなくて済みます。) # カレンダーを書くだけのサンプル sub make_calendar_table { my ($year, $mon) = @_; my ($html, @days); # 日付配列を用意 ## 配列の要素数を直接変更して、余白を作り出しています。 $#days = getwday($year, $mon, 1) - 1; ## その後に、1~月末までの値を入れます。 push @days, (1 .. getlastday($year, $mon)); # 曜日の行を生成 $html .= "<tr>"; foreach (qw/日 月 火 水 木 金 土/) { $html .= "<td width=100>$_</td>"; } $html .= "</tr>\n"; # カレンダーを生成 while (@days) { # 週のループ $html .= "<tr>"; for (my $wday = 0; $wday < 7; $wday++) { my $day = shift @days; # 値がなければ範囲外 if (! $day) { $html .= "<td><br></td>" } # そうでなければ範囲内 else { $html .= "<td>$day</td>"; } } $html .= "</tr>\n"; } return "<table border=1>\n$html</table>\n"; } ※曜日を返す getwday() と、月末日を返す getlastday() は省略 これを print make_calendar_table(2003, 9); のように呼び出せば、今月のカレンダーが出力されます。 ソースをコピーする場合、インデントの全角空白をタブなどに置き換えてご使用ください。