I'm trying to print out a monthly calendar, but it's only printing out 6 days and not even accurately... I've been through a number of times, but I think I'm just flatout not seeing something... Here's the code:
function last_day($month, $year) {
return mktime(23, 59, 59, $month + 1, 0, $year);
}
function print_calendar($month, $year, $weekdaytostart = 0) {
global $session, $database;
$last = idate('d', last_day($month, $year));
$opts = '<a href="'.$_SERVER['PHP_SELF'].'?month=%d&year=%d&view=2">%s</a>';
list($prev_month, $prev_year) = split(',',strftime('%m,%Y',mktime(0,0,0,$month-1,1,$year)));
$prev_month_link = sprintf($opts, $prev_month, $prev_year, '«');
list($next_month, $next_year) = split(',',strftime('%m,%Y',mktime(0,0,0,$month+1,1,$year)));
$next_month_link = sprintf($opts, $next_month, $next_year, '»');
$firstdaystamp = mktime(0,0,0, $month, 1, $year);
$firstwday = idate('w', $firstdaystamp);
$name = date('F', $firstdaystamp);
$weekorder = array();
for ($wo = $weekdaytostart; $wo < $weekdaytostart + 7; $wo++) {
$weekorder[] = $wo % 7;
}
$calendar = '<div id="calendar-header-left">'.$prev_month_link.'</div><div id="calendar-header">'.$name.' '.$year.'</div><div id="calendar-header-right">'.$next_month_link.'</div>';
foreach ($weekorder as $w) {
$dayname = date('D', mktime(0,0,0, $month, 1 - $firstwday + $w, $year));
$calendar .= '<div class="calendar-weekdays">'.$dayname.'</div>';
}
$calendar .= '<div style="clear:both"></div>';
$onday = 0;
$started = false;
while($onday <= $last) {
foreach($weekorder as $d) {
if(!($started)) {
if($d == $firstwday) {
$started = true;
$onday++;
} /* ends firstwday */
} /* ends if started */
if(($onday == 0) || ($onday > $last)) {
$calendar .= '<div class="calendar-day-blank">
<div class="calendar-day-date"> </div>
<div class="calendar-day-text"> </div>
</div>';
} else {
$calendar .= '<div class="calendar-day">
<div class="calendar-day-date">'.$onday.'</div>
<div class="calendar-day-text"> </div>
</div>';
$onday++;
}
} /* ends else statement */
} /* ends foreach weekorder as d */
return $calendar;
}