PSD to HTML conversion PSD to HTML conversion PSD2HTML.com with over 300 professionals takes the designs to HTML and beyond

Code Snippet

Home » Code Snippets » PHP » Build a Calendar Table

Build a Calendar Table

<?php

function build_calendar($month,$year,$dateArray) {

     // 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";

          $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;

}

?> 

Usage

Build a calendar of the current month:

<?php

     $dateComponents = getdate();

     $month = $dateComponents['mon'];
     $year = $dateComponents['year'];

     echo build_calendar($month,$year,$dateArray);

?>

Subscribe to The Thread

  1. How would i alter this to highlight the current day?

  2. These functions may also be used. The first creates a calendar a specific month/year, and the second creates a full year calendar from specified month/year.

    //For Specific Month and Year
    $month = "3"; //Number of month (1-12)
    $year = "2010"; //Four digets
    echo build_calendar($month,$year,$dateArray);

    //For all Months in Specific Year
    $year = "2010";
    $i = 1;
    $month=1; //Numeric Value
    while($i <'s= 12){
    echo build_calendar($month,$year,$dateArray);
    $month=$month+1;
    $i++;}

    • The second code should actually read:

      //For all Months in Specific Year
      $year = "2010";
      $i = 1;
      $month=1; //Numeric Value
      while($i <'s= 12){
      echo build_calendar($month,$year,$dateArray);
      $month=$month+1;
      $i++;}

    • This is pretty neat. Thank you.
      I still cannot get the complete year to work however.
      Any ideas?

  3. Zachary

    Could you post on how to have events (localhost database) displayed in the calendar and also have calendar controls such as picking of the month, year and next & previous month. Thanks

    Zachary (zachary007_4@hotmail.com)

Speak, my friend

At this moment, you have an awesome opportunity* to be the person your mother always wanted you to be: kind, helpful, and smart. Do that, and we'll give you a big ol' gold star for the day (literally).

Posting tips:
  • You can use basic HTML
  • When posting code, please turn all
    < characters into &lt;
  • If the code is multi-line, use
    <pre><code></code></pre>
Thank you,
~ The Management ~