SkyRanger Posted April 18, 2007 Share Posted April 18, 2007 I am trying to figure out how I can highlight todays date in a calendar script. Anybody have any ideas? function getEventDays($month, $year) { $days = array(); $sql = mysql_query(" SELECT DAY(event_date) AS day, COUNT(event_id), event_title FROM calendar_events WHERE MONTH(event_date) = '$month' AND YEAR(event_date) = '$year' GROUP BY day"); if (mysql_num_rows($sql) > 0) { while ($row = mysql_fetch_array($sql)) $days[] = $row['day']; } return $days; } function drawCalendar($month, $year) { // set variables we will need to help with layouts $first = mktime(0,0,0,$month,1,$year); // timestamp for first of the month $offset = date('w', $first); // what day of the week we start counting on $daysInMonth = date('t', $first); $monthName = date('F', $first); $weekDays = array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); $eventDays = getEventDays($month, $year); // Start drawing calendar $out = "<table border=\"1\" id=\"myCalendar\">\n"; $out .= "<tr><th colspan=\"7\">$monthName $year</th></tr>\n"; $out .= "<tr>\n"; foreach ($weekDays as $wd) $out .= "<td width=\"50\" class=\"weekDays\"><div align=\"center\">$wd</div></td>\n"; $i = 0; for ($d = (1 - $offset); $d <= $daysInMonth; $d++) { if ($i % 7 == 0) $out .= "<tr>\n"; // Start new row if ($d < 1) $out .= "<td class=\"nonMonthDay\"> </td>\n"; else { if (in_array($d, $eventDays)) { $out .= "<td class=\"monthDay\">\n"; $out .= "<a href=\"?year=$year&month=$month&day=$d\"><div align=\"center\">$d</div></a>\n"; $out .= "</td>\n"; } else $out .= "<td class=\"monthDay\"><div align=\"center\">$d</div></td>\n"; } ++$i; // Increment position counter if ($i % 7 == 0) $out .= "</tr>\n"; // End row on the 7th day } // Round out last row if we don't have a full week if ($i % 7 != 0) { for ($j = 0; $j < (7 - ($i % 7)); $j++) { $out .= "<td class=\"nonMonthDay\"> </td>\n"; } $out .= "</tr>\n"; } $out .= "</table>\n"; return $out; } $year = isset($_GET['year']) ? $_GET['year'] : date('Y'); $month = isset($_GET['month']) ? $_GET['month'] : date('m'); $day = isset($_GET['day']) ? $_GET['day'] : date('d'); echo drawCalendar($month, $year); // Previous month link $prevMonth = date('F',strtotime("last month")); $prevTS = strtotime("$year-$month-01 -1 month"); // timestamp of the first of last month $pMax = date('t', $prevTS); $pDay = ($day > $pMax) ? $pMax : $day; list($y, $m) = explode('-', date('Y-m', $prevTS)); echo "<p>\n"; echo "<a href=\"?year=$y&month=$m&day=$pDay\">« $prevMonth</a> |\n"; // Next month link $nextMonth = date('F',strtotime("next month")); $nextTS = strtotime("$year-$month-01 +1 month"); $nMax = date('t', $nextTS); $nDay = ($day > $nMax) ? $nMax : $day; list($y, $m) = explode('-', date('Y-m', $nextTS)); echo "<a href=\"?year=$y&month=$m&day=$nDay\">$nextMonth »</a>\n"; echo "</p>\n"; ?> </div> Quote Link to comment Share on other sites More sharing options...
techtheatre Posted April 18, 2007 Share Posted April 18, 2007 it seems you need to just do an if statement when displaying each date and in that statement use in_array() to see if the current date you are parsing is in the date array you are using to select your highlighted dates from http://www.php.net/function.in-array if(in_array($CurrentDate, $dateArray)){ //highlight cell with <div> background color } Quote Link to comment Share on other sites More sharing options...
HeyRay2 Posted April 18, 2007 Share Posted April 18, 2007 You can add a new class in your CSS to display todays date as you would like to, then just modify your calendar printing code to check for printing out todays cell. Change: if (in_array($d, $eventDays)) { $out .= "<td class=\"monthDay\">\n"; $out .= "<a href=\"?year=$year&month=$month&day=$d\"><div align=\"center\">$d</div></a>\n"; $out .= "</td>\n"; } else $out .= "<td class=\"monthDay\"><div align=\"center\">$d</div></td>\n"; ... to this: // Set the current date and the date to be printed // to compare them $today = date("m-d-Y"); $current = $month."-".$d."-".$year; // Check if the current day to be printed is today if($today == $current){ $td_class = "monthToday"; } else { $td_class = "monthDay"; } if (in_array($d, $eventDays)) { $out .= "<td class=\"".$td_class."\">\n"; $out .= "<a href=\"?year=$year&month=$month&day=$d\"><div align=\"center\">$d</div></a>\n"; $out .= "</td>\n"; } else $out .= "<td class=\"".$td_class."\"><div align=\"center\">$d</div></td>\n"; Quote Link to comment Share on other sites More sharing options...
SkyRanger Posted April 18, 2007 Author Share Posted April 18, 2007 Awesome, that worked perfectly. Thanks Quote Link to comment Share on other sites More sharing options...
SpireLink Posted August 4, 2007 Share Posted August 4, 2007 Hi, i like your calendar script , could you please attache the database schema and all the related calendar files? add event, delete event , update event, show event, display calendar and any other files you use, more over i wana ask you, does it need to have the user setup his starting day ? becaue my site doesnt need login .. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.