<?php class Calendar { function num_weeks($month, $year) { $num_weeks=4; $first_day = $this->first_day($month, $year); // if the first week doesn't start on monday // we are sure that the month has at minimum 5 weeks if($first_day!=1) $num_weeks++; $widows=$first_day-1; $fw_days=7-$widows; if($fw_days==7) $fw_days=0; $numdays=date("t",mktime(2, 0, 0, $month, 1, $year)); if( ($numdays - $fw_days) > 28 ) $num_weeks++; return $num_weeks; } // this method returns array with the days // in a given week. Always starts from Monday and return 7 numbers // if the day is there, returns the date, otherwise returns zero // very useful to build the empty cells of the calendar function days($month, $year, $week, $num_weeks=0) { $days=array(); if($num_weeks==0) $num_weeks=$this->num_weeks($month, $year); // find which day of the week is 1st of the given month $first_day = $this->first_day($month, $year); // find widow days (first week) $widows=$first_day-1; // first week days $fw_days=7-$widows; // if $week==1 don't do further calculations if($week==1) { for($i=0;$i<$widows;$i++) $days[]=0; for($i=1;$i<=$fw_days;$i++) $days[]=$i; return $days; } // any other week if($week!=$num_weeks) { $first=$fw_days+(($week-2)*7); for($i=$first+1;$i<=$first+7;$i++) $days[]=$i; return $days; } # only last week calculations below // number of days in the month $numdays=date("t",mktime(2, 0, 0, $month, 1, $year)); // find orphan days (last week) $orphans=$numdays-$fw_days-(($num_weeks-2)*7); $empty=7-$orphans; for($i=($numdays-$orphans)+1;$i<=$numdays;$i++) $days[]=$i; for($i=0;$i<$empty;$i++) $days[]=0; return $days; } function first_day($month, $year) { $first_day= date("w", mktime(2, 0, 0, $month, 1, $year)); if($first_day==0) $first_day=7; # convert Sunday return $first_day; } } ?>
|