PX : code

table calendar by Peter C. Norton
Download this code


<?php
  
# This is distributed under the terms of the GNU General Public License.
  # Since php3 comes with the license, and I am not in control of the
  # distribution of this code, I will refer you to the file COPYING
  # that came with PHP.  If you can't find it there, go see
  # http://www.fsf.org/copyleft/gpl.html
  # Copyright 1998 Peter C. Norton <spacey@pobox.com>

  
class tableCalendar {
    
# Create an html calendar for a month.
    # Interface:
    # $calendar =  new tableCalendar;
    #
    # Set necessary variables:
    # $calendar->setDay($day);     # Integer
    # $calendar->setMonth($month); # Integer
    # $calendar->setYear($year);   # Integer
    # $calendar->setFrameTarget($target_string); # String
    # $calendar->setHrefString($href_string);    # String
    #
    # $calendar->printCal(); # This'll print your table for you.

    
var $selectedDay$selectedMonth$selectedYear;
    var 
$days;
    var 
$frametarget$href;
    var 
$DEBUGGING_SET 0;

    function 
setDay ($day) {
      
$this->selectedDay $day;
    }
    function 
setMonth ($month) {
      
$this->selectedMonth $month;
    }
    function 
setYear ($year) {
      
$this->selectedYear $year;
    }

    function 
setFrameTarget($target_string) {
      
$this->frametarget "target = \"$target_string\"";
    }

    function 
setHref($href_string) {
      
$this->href $href_string;
    }
   
    function 
setAndCheckDefaults () {
      if (!
$this->selectedDay ) {
        
$this->selectedDay date('d');
      }
      if (!
$this->selectedMonth) {
        
$this->selectedMonth date('m');
      } 
      if (!
$this->selectedYear) {
        
$this->selectedYear date('Y');
      }

      
$this->days = array(0=>'Sun',1=>'Mon',2=>'Tue',3=>'Wed',
                          
4=>'Thu',5=>'Fri',6=>'Sat');
    }

    function 
printCal () {
      
$monthOrig;
      
$monthTest;
      
$monthName;
      
$firstday;
      
$dayRow;
      
$lastday 31;

      
$this->setAndCheckDefaults();   # make sure we do the right thing(s)

      # Find out the first day of the week!
      
$firstday date('w',mktime(0,0,0,$this->selectedMonth,1,$this->selectedYear));

      
# have to perform a loop to test from 31 backwards,
      # to see what the last day of the month is
      
$lastday 31;
      do {
        
$monthOrig date('m',mktime(0,0,0,$this->selectedMonth,1,$this->selectedYear));
        
$monthTest date('m',mktime(0,0,0,$this->selectedMonth,$lastday,$this->selectedYear));
        if (
$monthTest != $monthOrig) { $lastday -= 1; };
      } while (
$monthTest != $monthOrig);

      
$monthName date('F',mktime(0,0,0,$this->selectedMonth,1,$this->selectedYear));

      if(
$this->DEBUGGING_SET != 0) {
        print(
"<p>first day of the first week of $selectedMonth $selectedYear is $firstday (from 0 to 6) <p>\n");
        print(
"The last day of $selectedMonth $selectedYear is $lastday\n<p>");
      }
      
      
$this->printTable($monthName$firstday$lastday);
    }

    function 
printHref($day) {
      
$href '';

      if(
$this->href) {
    print(
"<A HREF=\"$this->href?month=$this->selectedMonth&day=$day&year=$this->selectedYear\" $this->frametarget>$day</a>");
      }
    }

    function 
printTable ($monthName$firstDay$lastDay) {
      
$dayRow 0;
      
$day 0;
      
$targetString;
      
$adjustedDay;

      print(
"<table bgcolor=\"#FFFFFF\">");
      print(
"<caption valign=\"center\"><b>$monthName $this->selectedYear</b></caption>");
      print(
"<tr>\n");
      
      
# Print days along the top.
      
for($i=0$i<=6$i++) {
        print(
"<td width=10%>".$this->days[$i]."</td>\n");
      }
      print(
"</tr>\n");

      print(
"<tr>\n");
      while(
$dayRow $firstDay) {
        print(
"<td><!-- This day in prior month --></td>");
        
$dayRow += 1;
      }

      while(
$day $lastDay) {
        if((
$dayRow 7) == 0) {
          print(
"</tr>\n<tr>\n");
        }

        
$adjustedDay $day+1;
        print(
"<td>");
    
$this->printHref($adjustedDay); 
    print(
"</td>");
        
$day += 1;
        
$dayRow += 1;
      } 
      print(
"\n</tr>\n</table>\n");
    }
  }
?>

Comments or questions?
PX is running PHP 5.2.17
Thanks to Miranda Productions for hosting and bandwidth.
Use of any code from PX is at your own risk.