<?php // Set up the variables (today, month, year, cmd) // today = m/d/y // cmd = 1 (add month) or -1 (sub month) function setvars() { // Default is today $today = getdate(); $month = $today['mon']; $year = $today['year']; $today = $month."/".$today['mday']."/".$year; // Get POST data if (isset($_POST) && count($_POST) != 0) { if (isset($_POST['month'])) { $month = $_POST['month']; } if (isset($_POST['year'])) { $year = $_POST['year']; } if (isset($_POST['next'])) { $cmd = 1; } if (isset($_POST['prev'])) { $cmd = -1; } } // Get GET data if (isset($_GET) && count($_GET) != 0) { if (isset($_GET['month'])) { $month = $_GET['month']; } if (isset($_GET['year'])) { $year = $_GET['year']; } if (isset($_GET['next'])) { $cmd = 1; } if (isset($_GET['prev'])) { $cmd = -1; } } // If given a command (move month) // act on it if (isset($cmd)) { $month += $cmd; // Adjust month over or underrun if ($month >= 13) { $month = 1; $year += 1; } elseif ($month <= 0) { $month = 12; $year -= 1; } } // Return vars in an array return array("today" => $today, "month" => $month, "year" => $year, "cmd" => $cmd); } // End setvars() // Do the document header function docheader($month,$year) { // Set script to return to (form action) $this_script = $_SERVER['PHP_SELF']; $month_text = date("F",strtotime($month."/1/".$year)); // If content header has not been sent, // send it if (!headers_sent()) { header('Content-type: text/html'); } // Print the document header (up to first date row) print <<<HTML <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1.dtd"> <html> <head> <title>Calendar - $Month $Year</title> <style type="text/css"> tr.weekdays td { width: 100px; text-align: center; } tr.week td { width: 100px; height: 100px; color: black; } </style> </head> <body> <form action="$this_script" method="post"> <table border="1"> <!-- Controls and calendar title (month) --> <tr> <td colspan="1" align="left"> <input type="submit" name="prev" value="<<" /> </td> <td colspan="5" align="center"> <strong> $month_text $year </strong> <input type="hidden" name="month" value="$month" /> <input type="hidden" name="year" value="$year" /> </td> <td colspan="1" align="right"> <input type="submit" name="next" value=">>" /> </td> </tr> <!-- Day of week header row --> <tr class="weekdays"> <th>Sunday</th> <th>Monday</th> <th>Tuesday</th> <th>Wednesday</th> <th>Thursday</th> <th>Friday</th> <th>Saturday</th> </tr> <!-- Calendar (days) start here --> HTML; } // End docheader() // Do the document footer (close tags, end doc) function docfooter() { print <<<HTML <!-- Close all open tags, end document --> </table> </form> </body> </html> HTML; } // End docfooter() // Print an empty day (cell) function emptyday() { print <<<HTML <td align="right" valign="top"> </td> HTML; } // End emptyday() // Print a day cell function day($today,$month,$day,$year) { $curday = $month."/".$day."/".$year; if ($curday == $today) { $font = " style=\"color: red;\""; } else { $font = ""; } print <<< HTML <td align="right" valign="top" $font>$day</td> HTML; } // End day() // Open or close a row function weekrow($cmd) { switch ($cmd) { case "open": print "<tr class=\"week\">\n"; break; case "close": print "</tr>\n"; break; } } // End weekrow() // Main program body function main() { // Set the date vars by default, POST, or GET $vars = setvars(); $today = $vars['today']; $month = $vars['month']; $year = $vars['year']; $cmd = $vars['cmd']; // Do the header and open first row docheader($month,$year); weekrow("open"); // Set up first weekday and 1st day (m/1/y) $first_weekday = date("w",strtotime($month."/1/".$year)) + 1; $day = 1; // Print empty days up to the first weekday of month for ($weekday = 1; $weekday < $first_weekday; $weekday++) { emptyday(); } // Do rest of month while we have a valid date while (checkdate($month,$day,$year)) { // If SUN, open the row if ($weekday == 1) { weekrow("open"); } // Print day and increment day($today,$month,$day,$year); $weekday++; $day++; // If SAT, close row reset weekday if ($weekday > 7) { weekrow("close"); $weekday = 1; } } // Close current week while ($weekday != 1 && $weekday <= 7) { emptyday(); $weekday++; } // Close document docfooter(); } // End main(); // Kick it all off main(); ?>