24 December 2013

Build a dynamic calendar with PHP

Here you can build a dynamic Calendar with PHP,

Following function will generate table structure of calender...

function build_calendar($month,$year)
{
 // Create array containing abbreviations of days of week.
 $daysOfWeek = array('S','M','T','W','T','F','S');
 // What is the first day of the month in question?
 $firstDayOfMonth = mktime(0,0,0,$month,1,$year);
 // How many days does this month contain?
 $numberDays = date('t',$firstDayOfMonth);
 // Retrieve some information about the first day of the
 // month in question.
 $dateComponents = getdate($firstDayOfMonth);
 // What is the name of the month in question?
 $monthName = $dateComponents['month'];
 // What is the index value (0-6) of the first day of the
 // month in question.
 $dayOfWeek = $dateComponents['wday'];
 // Create the table tag opener and day headers
 $calendar = "<table class='calendar'>";
 $calendar .= "<caption>$monthName $year</caption>";
 $calendar .= "<tr>";
 // Create the calendar headers
 foreach($daysOfWeek as $day) {
  $calendar .= "<th class='header'>$day</th>";
 }
 // Create the rest of the calendar
 // Initiate the day counter, starting with the 1st.
 $currentDay = 1;
 $calendar .= "</tr><tr>";
 // The variable $dayOfWeek is used to
 // ensure that the calendar
 // display consists of exactly 7 columns.
 if ($dayOfWeek > 0) {
  $calendar .= "<td colspan='$dayOfWeek'>&nbsp;</td>";
 }
 $month = str_pad($month, 2, "0", STR_PAD_LEFT);
 while ($currentDay <= $numberDays)
 {
  // Seventh column (Saturday) reached. Start a new row.
  if ($dayOfWeek == 7) {
   $dayOfWeek = 0;
   $calendar .= "</tr><tr>";
  }
  $currentDayRel = str_pad($currentDay, 2, "0", STR_PAD_LEFT);
  $date = "$year-$month-$currentDayRel";
  if($date == date('Y-m-d'))
  {
   $calendar .= "<td class='day' rel='$date' style='color:red;'><b><em>$currentDay</em></b></td>";
  } else {
   $calendar .= "<td class='day' rel='$date'>$currentDay</td>";
  }
  // Increment counters
  $currentDay++;
  $dayOfWeek++;
 }
 // Complete the row of the last week in month, if necessary
 if ($dayOfWeek != 7) {
  $remainingDays = 7 - $dayOfWeek;
  $calendar .= "<td colspan='$remainingDays'>&nbsp;</td>";
 }
 $calendar .= "</tr>";
 $calendar .= "</table>";
 return $calendar;
}


Simple uses:-

/* For July 2023 */
echo build_calendar(7,2013);
/* For August 2013*/
echo build_calendar(8,2013);


Also, You can add Css to this calender. Eg:-

</style>
    table.calendar {}
    .calendar tr {}
    .calendar td {}
</style>

No comments:

Post a Comment