PHP Classes
elePHPant
Icontem

File: calendar.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Bob  >  bCalendar  >  calendar.php  >  Download  
File: calendar.php
Role: Class source
Content type: text/plain
Description: the main calendar class
Class: bCalendar
Compute the days and weeks of a month
Author: By
Last change:
Date: 3 years ago
Size: 2,493 bytes
 

Contents

Class file image Download
<?php
class Calendar
{
    function
num_weeks($month, $year)
    {
       
$num_weeks=4;
   
       
$first_day = $this->first_day($month, $year);
       
       
// if the first week doesn't start on monday
        // we are sure that the month has at minimum 5 weeks
       
if($first_day!=1) $num_weeks++;
       
       
$widows=$first_day-1;
       
$fw_days=7-$widows;
        if(
$fw_days==7) $fw_days=0;
       
       
$numdays=date("t",mktime(2, 0, 0, $month, 1, $year));
       
        if( (
$numdays - $fw_days) > 28 ) $num_weeks++;
       
        return
$num_weeks;
    }
   
   
// this method returns array with the days
    // in a given week. Always starts from Monday and return 7 numbers
    // if the day is there, returns the date, otherwise returns zero
    // very useful to build the empty cells of the calendar
   
function days($month, $year, $week, $num_weeks=0)
    {
       
$days=array();
       
        if(
$num_weeks==0) $num_weeks=$this->num_weeks($month, $year);
       
       
// find which day of the week is 1st of the given month
       
$first_day = $this->first_day($month, $year);
               
       
// find widow days (first week)
       
$widows=$first_day-1;
       
       
// first week days
       
$fw_days=7-$widows;
       
       
// if $week==1 don't do further calculations
       
if($week==1)
        {
            for(
$i=0;$i<$widows;$i++) $days[]=0;
            for(
$i=1;$i<=$fw_days;$i++) $days[]=$i;
            return
$days;
        }
       
       
// any other week
       
if($week!=$num_weeks)
        {
           
$first=$fw_days+(($week-2)*7);
            for(
$i=$first+1;$i<=$first+7;$i++) $days[]=$i;
            return
$days;
        }
       
       
       
# only last week calculations below
       
        // number of days in the month
       
$numdays=date("t",mktime(2, 0, 0, $month, 1, $year));
               
       
// find orphan days (last week)
       
$orphans=$numdays-$fw_days-(($num_weeks-2)*7);
       
$empty=7-$orphans;
        for(
$i=($numdays-$orphans)+1;$i<=$numdays;$i++) $days[]=$i;
        for(
$i=0;$i<$empty;$i++) $days[]=0;
        return
$days;
    }
   
    function
first_day($month, $year)
    {
       
$first_day= date("w", mktime(2, 0, 0, $month, 1, $year));
        if(
$first_day==0) $first_day=7; # convert Sunday
       
       
return $first_day;
    }
}
?>