#!/usr/bin/perl #本日のバックカラー $today_color = '#FFC3CE'; #それ以外のバックカラー $day_bgcolor = '#ffffff'; #数字のフォントカラー $font_color = 'black'; #土曜日のフォントカラー $sat_color = '#0000FF'; #日曜日、祝日のフォントカラー $sun_color = '#FF0000'; &time; #春分の日、秋分の日所得 ($spring,$autum)=&get_special_day($year); # 祝日 @spe_day = ('1 1','2 11',"3 $spring",'4 29','5 3','5 4','5 5',"9 $autum",'11 3','11 23','12 23'); # 祝日2(成人の日、体育の日)第2月曜 @spe_day2 = ('1','10'); # 祝日3 (海の日、敬老の日)第3月曜日 @spe_day3 = ('7','9'); #月始めの曜日所得 $wday_no = &wday_no(1,$year,$mon); #月最後の日所得 $lastday = (31,28,31,30,31,30,31,31,30,31,30,31) [$mon-1] + ($mon == 2 && (($year % 4 == 0 && $year % 100 != 0) || $year % 400 == 0)) ; &html; sub html{ print <<"HTML"; Content-type: text/html カレンダー HTML foreach $i(@week){ if ($i eq $week[0]){ $color = $sun_color;} elsif ($i eq $week[6]){ $color = $sat_color;} else {$color = $font_color;} print "\n"; } print "\n"; $flag =0; $c = 0; $a = 0; $next_flag = 0; foreach (1..42){ if ($c == 7 ){$c = 0;} ++$c; if (($c < $wday_no +1) && ($start_flag == 0)|| ($a == $lastday)){ $day_count = ' ';$bgcolor = $day_bgcolor;} else { $day_count = ++$a; $start_flag = 1;} if (($start_flag == 1)&&($c == 2)){++$flag ;} if ((($mon == $spe_day2[0] )||($mon == $spe_day2[1])) && ($c == 2) && ($flag == 2)){ $color = $sun_color;$bgcolor = $day_bgcolor; } elsif ((($mon == $spe_day3[0] )||($mon == $spe_day3[1])) && ($c == 2) && ($flag == 3)){ $color = $sun_color;$bgcolor = $day_bgcolor; } elsif ($c == 1 ) { $color = $sun_color; $bgcolor = $day_bgcolor;} elsif (($c == 2) && ($next_flag==1)){ $color = $sun_color; $next_flag = 0;} elsif ($c == 2 ) {$bgcolor = $day_bgcolor; $color = $font_color; } elsif ($c == 7 ) { $color = $sat_color; $bgcolor = $day_bgcolor;} else { $bgcolor = $day_bgcolor; $color = $font_color;} foreach (@spe_day){ ($mon_value,$day_value)= split(/ /); if (($mon_value == $mon)&&($day_value == $a)&&($c == 1 )){$next_flag = 1;last;} if (($mon_value == $mon)&&($day_value == $a)){$color = $sun_color;last;} } if ($a == $day){ if ($c == 7 ){ $bgcolor = $today_color; } elsif ($c == 1 ) { $bgcolor = $today_color;} elsif ($c == 2 ) { $bgcolor = $today_color;} else{$bgcolor = $today_color; } } if ( $day_count eq ' '){$bgcolor = $day_bgcolor;} if (($c == 1) && ($flag > 2) && ( $day_count eq ' ')){last;} elsif ($c == 1) {print "\n";} print "\n"; if ($c == 7 ) {print "\n";} } print "$redflag
$year年$mon月
$i
$day_count
"; exit; } #現在時間所得 sub time{ ($sec,$min,$hour,$day,$mon,$year,$wday) = localtime(time); @week = ('日','月','火','水','木','金','土'); $week = $weekday[$wday]; $mon++; $year = 1900 + $year; } #ツェラーの公式を利用、指定日の曜日所得 sub wday_no { local($day, $year, $mon) = @_; if ($mon == 1 || $mon == 2) { $year--; $mon += 12; } int ($year + int ($year/4) - int ($year/100) + int ($year/400) + int (2.6*$mon+1.6) + $day) % 7; } #春分の日、秋分の日 sub get_special_day{ local($year)=@_; $spring =int(20.8431+0.242194*($year-1980)-int(($year-1980)/4)); $autum=int(23.2488+0.242194*($year-1980)-int(($year-1980)/4)); ($spring,$autum); } __END__