<?
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
$marca vari�vel que termina se o valor do dia ser� marcado ou n�o.
       Se diferente de zero marca.
*/
   function cria($dia,$mes,$ano,$marca=0){
      $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));//String com dia da semana em ingl�s
      for($i=0;$i < 42;$i++){
         if($i >= $diasem and $i < ($diasem+$last)){
            $aux[$i]=$i-$diasem+1;
         }else{
            $aux[$i]="&nbsp;";
         }
      }
      if($marca != 0){
         $aux[$diasem+$dia-1]="<b>".$aux[$diasem+$dia-1]."</b>";
      }
      for($x=0;$x < 42;$x++){
         if($x%7 != 0){
            $aux[$x]="\n<td width=\"20\">".$aux[$x]."</td>";
         }else{
            $aux[$x]="\n<td width=\"20\"><font color=\"#FF0000\">".$aux[$x]."</font></td>";
         }
      }
      for($y=0;$y < 42;$y+=7){
         $aux[$y]="<tr align=\"center\" bgcolor=\"#FFFFCC\">".$aux[$y];
         $aux[6+$y].="</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,2003);?></td>
      <td><?$teste->cria(1,2+$i,2003);?></td>
      <td><?$teste->cria(1,3+$i,2003);?></td>
      <td><?$teste->cria(1,4+$i,2003);?></td>
   </tr>
<?
}
?>
</table>