<? 
class calendario{ 
   var $mes=array('1'=>'JANEIRO','2'=>'FEVEREIRO','3'=>'MAR�O','4'=>'ABRIL','5'=>'MAIO','6'=>'JUNHO','7'=>'JULHO','8'=>'AGOSTO','9'=>'SETEMBRO','10'=>'OUTUBRO','11'=>'NOVEMBRO','12'=>'DEZEMBRO');//Array com os meses do ano 

/* 
$dia inteiro de 1 a 31 
$mes inteiro de 1 a 12 
$ano inteiro de 1901 a 2038 

*/ 
   function cria($dia,$mes,$ano){ 
      $verf=date ("d/n/Y", mktime (0,0,0,$mes,$dia,$ano));//Corrige qualquer data invalida 
      $pieces=explode("/",$verf); 
      $dia=$pieces[0]; 
      $mes=$pieces[1]; 
      $ano=$pieces[2]; 
      $last=date ("d", mktime (0,0,0,$mes+1,0,$ano));//Inteiro do ultimo dia do m�s 
      $diasem=date ("w", mktime (0,0,0,$mes,1,$ano));//Numero de dias na primeira semana do m�s
      $numt=$last+$diasem;//Total de linhas na tabela
      $numt=($numt%7 != 0)?($numt+7-$numt%7):$numt;
      for($i=0;$i < $numt;$i++){ 
         $data=$i-$diasem+1;
         if($i >= $diasem and $i < ($diasem+$last)){ 
            if($i%7 != 0){ 
               $aux[$i]="\n<td width=\"20\">$data</td>"; 
            }else{ 
               $aux[$i]="\n<td width=\"20\"><font color=\"#FF0000\">$data</font></td>"; //Marca os domingos
            } 
         }else{ 
            $aux[$i]="\n<td width=\"20\">&nbsp;</td>"; 
         } 
         if($i%7 == 0){
            $aux[$i]="<tr align=\"center\" bgcolor=\"#FFFFCC\">".$aux[$i]; 
         }
         if($i%7 == 6){
            $aux[$i].="</tr>\n"; 
         }
      } 


      echo "<table border=\"1\"  cellspacing=\"0\" cellpadding=\"0\" bordercolor=\"#000000\"> 
               <tr> 
                  <td > 
                     <table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"> 
                        <tr bgcolor=\"#6CABF9\" align=\"center\"> 
                           <td width=\"100%\" colspan=\"7\"><font size=\"1\"><b>".$this->mes[$mes]."&nbsp;$ano</b></font></i></td> 
                        </tr> 
                        <tr bgcolor=\"#6CABF9\" align=\"center\"> 
                           <td width=\"20\">D</td> 
                           <td width=\"20\">S</td> 
                           <td width=\"20\">T</td> 
                           <td width=\"20\">Q</td> 
                           <td width=\"20\">Q</td> 
                           <td width=\"20\">S</td> 
                           <td width=\"20\">S</td> 
                       </tr>"; 
      echo implode(" ",$aux); 
      echo "</table> 
                  </td> 
               </tr> 
            </table>"; 
   } 
} 
//Exemplos 
$teste=new calendario; 
$teste->cria(date("d"),date("n"),date("Y"),1); //Calendario com data atual 
$teste->cria(-31,70,1990,1);//Calendario com data invalida 
$teste->cria(3,11,2002,1);//Calendario do dia 3/11/2002 
?> 
<table> 
<? 
//Calendario do ano de 2003 
for($i=0;$i<12;$i+=4){ 
?> 
   <tr> 
      <td><?$teste->cria(1,1+$i,2004);?></td> 
      <td><?$teste->cria(1,2+$i,2004);?></td> 
      <td><?$teste->cria(1,3+$i,2004);?></td> 
      <td><?$teste->cria(1,4+$i,2004);?></td> 
   </tr> 
<? 
} 
?> 
</table>