Dear All,
In my work I have to build a calender for which I used the following code collected from phpbuilder.com:
But the problem that I am facing is
1) It is not displaying 31 days for january, march, may, july, august, october, and December.
2) When I decided to move forward or backward using arrow provided in the program it is suddenly jumping to display screen.
I feel very much thankful if any body suggest me a way to solve this problem. The code segments are:
1) Calender.php
<?php
//example of usage at bottom of this script.
class Calender
{
//calender class, manages everything related to dates and calenders
//this is a system class and thus has no user interface.
//works with month ranges 1-12 full years day ranges 1-31 dow ranges 0-6
function Calender()
{
}
function getDayOfWeek($dd = 1, $mm = 1, $yy = 2000)
{
//returns int giving day of week for a date
$dateArray = getdate(mktime(0,0,0,$mm,$dd,$yy));
return $dateArray['wday'];
}
function getWeekOfMonth($dd = 1, $mm = 1, $yy = 2000)
{
//returns int (1-5) giving which week of the month a date falls in
//useful for creating traditional calender matrices
$firstDayOfMonth = 1 + $this->getDayOfWeek(1,$mm,$yy);
//we know first day of month is in the first week
$dDiff = $dd - $firstDayOfMonth;
$wDiff = round($dDiff/7);
return $wDiff + 1;
}
function isLeapYear($yy = 2000)
{
//returns 1 if year is a leap year, else 0
if (round(($yy - 2000)/4) == (($yy - 2000)/4))
{
return 1;
}
else
{
return 0;
}
}
function getDaysInMonth($mm = 1, $yy = 2001)
{
//returns number of days in month 28,29,30,31
//expects $mm range 1-12, full year
//does take into account leap years
//returns zero if there are problems
switch ($mm-1)
{
case 0:
return 31;
break;
case 1:
if ($this->isLeapYear($yy))
{
return 29;
}
else
{
return 28;
}
break;
case 2:
return 31;
break;
case 3:
return 30;
break;
case 4:
return 31;
break;
case 5:
return 30;
break;
case 6:
return 31;
break;
case 7:
return 31;
break;
case 8:
return 30;
break;
case 9:
return 31;
break;
case 10:
return 30;
break;
case 11:
return 31;
break;
default:
return 0;
break;
}
}
function getMonthName($mm = 1)
{
//returns name of month
switch ($mm-1)
{
case 0:
return "January";
break;
case 1:
return "February";
break;
case 2:
return "March";
break;
case 3:
return "April";
break;
case 4:
return "May";
break;
case 5:
return "June";
break;
case 6:
return "July";
break;
case 7:
return "August";
break;
case 8:
return "September";
break;
case 9:
return "October";
break;
case 10:
return "November";
break;
case 11:
return "December";
break;
default:
return 0;
break;
}
}
}
class CalenderInterface
{
//user interface for calender
//usage; instantiate with $cal = new CalenderInterface($calenderObject);
// display a calender with $cal->displayCalender(array(x,y,z...),month,year)
// where x,y,z are dates you wish to have highlighted
// 0<month<=12
//
// displayCalender() returns HTML containing form fields, used for changing the month/year fields
// at the top of the calender AND for identifying dates selected
// changing month/year OR selecting a date automatically submits the form
// NOTE: there are no <form > fields surrounding the calender, they should be wrapped around
// the displayCalender call by whatever script is implementing the calender component.
// this enables the form action and any hidden fields to be specified.
//
// Jim Wright (jdlwright@yahoo.com)
function CalenderInterface($calender)
{
$this->calender = $calender;
}
function displayCalender($selectedDays, $month, $year)
{
//displays a calender with $selectedDays[] highlighted
$monthName = $this->calender->getMonthName($month);
//JS functions
print "
<script>
function prevMonth(obj)
{
if (".($month-1)." < 1)
{
obj.calenderMonth.selectedIndex='11';
obj.calenderYear.selectedIndex = obj.calenderYear.selectedIndex - 1;
}
else
{
obj.calenderMonth.selectedIndex='".($month-1-1)."';
}
}
function nextMonth(obj)
{
if (".($month+1)." > 12)
{
obj.calenderMonth.selectedIndex='0';
obj.calenderYear.selectedIndex = obj.calenderYear.selectedIndex + 1;
}
else
{
obj.calenderMonth.selectedIndex='".($month+1-1)."';
}
}
</script>
";
//create a containing table
print "<table border=1 cellpadding=0 cellspacing=0 bordercolor=#cccccc style='font-size: 8pt; font-family: arial, helvetica, sans-serif;'>
<tr class='calender'><td colspan=7 align=center><div>
<input type='button' value='<' onClick=\"prevMonth(this.form);submit()\">
<select name='calenderMonth' onChange='submit()'>
";
for($j=1;$j<=12;$j++)
{
$mN = $this->calender->getMonthName($j);
if ($mN == $monthName)
{
print "<option value='$j' selected>$mN</option>";
}
else
{
print "<option value='$j'>$mN</option>";
}
}
print "
</select>
<select name='calenderYear' onChange='submit()'>";
for ($j=$year-5; $j<=$year+5; $j++)
{
if ($j == $year)
{
print "<option value='$j' selected>$j</option>";
}
else
{
print "<option value='$j'>$j</option>";
}
}
print "
</select>
<input type='button' value='>' onClick=\"nextMonth(this.form);submit()\">
</div>
</td></tr>
<tr>
<td class='calender'>Sun</tD>
<td class='calender'>Mon</tD>
<td class='calender'>Tue</tD>
<td class='calender'>Wed</tD>
<td class='calender'>Thu</tD>
<td class='calender'>Fri</tD>
<td class='calender'>Sat</tD>
</tr>
<input type='hidden' name='calenderDOM' value='0'>
";
$dom = 1;
//scan thru calender grid
for($r=1; $r<=6; $r++)
{
for ($c=0; $c<=7; $c++)
{
if ($c == 0)
{
print "<tr>";
}
else
{
if ($c == 1 + $this->calender->getDayOfWeek($dom,$month,$year))
{
if ($this->calender->getDayOfWeek($dom,$month,$year) == 0 || $this->calender->getDayOfWeek($dom,$month,$year) == 6)
{
$dayStyle = 'weekend';
}
else
{
$dayStyle = 'weekday';
}
//see if date is hightlighted
$p = 0; $style = "";
for ($j=0;$j<sizeof($selectedDays);$j++)
{
if ($selectedDays[$j] == $dom)
{
$p = 1;
}
}
//if it is highlighted mark it so, somehow
if ($p)
$style = "border: 1px solid red;";
print "<td class='calender' align=center valign=middle><div style='$style'><input type='button' value='$dom' onClick=\"this.form.calenderDOM.value='$dom';submit()\" style=\"margin: 0px; width: 20px; height: 20px; align: center; vertical-align: middle; background-color: #dddddd; font-size: 8pt; font-family: arial, helvetica, sans-serif;\"></div></td>\n";
//if there are no more days, skip drawing the rest
if ($dom < $this->calender->getDaysInMonth($month,$year))
{
$dom++;
}
else
{
$r=7;
}
}
else
{
print "<td></td>";
}
}
if($c == 7)
{
print "</tr>";
}
}
}
print "</table>";
}
}
//instantiate the calender
$calender = new Calender();
//instatiate the interface with the $calender object
$calenderInterface = new CalenderInterface($calender);
//days we want highlighted
//$selectedDays = array(20,1,23,25,28);
//some default values
if ($calenderMonth == 0)
{
$calenderMonth = 11;
$calenderYear = 2000;
}
//echo "Calender example.";
/echo "<form action='example.php' method='get'>";
$calenderInterface->displayCalender($selectedDays,$calenderMonth,$calenderYear);
echo "</form>";/
echo "<form action='datetest.php' method='get'>";
$calenderInterface->displayCalender($selectedDays,$calenderMonth,$calenderYear);
echo "</form>";
?>
2)datetest.php
<?
/echo $selectedDays;
echo $calenderMonth;
echo $calenderYear;/
echo $calenderMonth;
echo $calenderDOM;
echo $calenderYear;
?>