• 締切済み

カレンダー作成

普通のカレンダーみたいなものを作成したいのですが、例えば今月の頭って月曜日ですよね? それの前の日曜日の枠を作成したいのですが方法がわかりません。 どのようにすればいいのでしょうか? 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終了

みんなの回答

  • leaz024
  • ベストアンサー率75% (398/526)
回答No.1

カレンダーの月始めに存在する余白の数は、ちょうど「ついたち」の曜日の値(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); のように呼び出せば、今月のカレンダーが出力されます。 ソースをコピーする場合、インデントの全角空白をタブなどに置き換えてご使用ください。

関連するQ&A