Pero por el momento permite generar dos tipos de calendarios, uno simple y otro con gestion de eventos
Código PHP:
<?php
class calendario{
var $date;
var $day;
var $month;
var $year;
var $actualDay;
var $firstDay;
var $lastDay;
var $nexDay;
var $nexMonth;
var $nextYear;
var $Event;
var $classCalendar = "defaultCalendar";
function calendario($data=null){
$this->date = time();
if(is_null($data['dia'])){
$data['dia'] = date('d',$this->date);
}
if(is_null($data['mes'])){
$data['mes'] = date('m',$this->date);
}
if(is_null($data['anio'])){
$data['anio'] = date('Y',$this->date);
}
$this->day = $data['dia'];
$this->month = $data['mes'];
$this->year = $data['anio'];
}
function createMes ($mes,$anio=''){
/*******************************************
el dato $mes tiene que ser un numero del 1 al 12
********************************************/
if(is_int($mes)){
if($mes >0 || $mes <=12){
$strMes = calendario::switchMes($mes);
// Creamos todas las variables de control
$diaMes = 1;
$numDiaSemana = calendario::numSemana(1,$mes,$this->year);
$ultimoDia = calendario::getLastDay($mes,$this->year);
$currentDay = $this->day;
$estruct = '
<table class="'.$classCalendar.'">
<tr colspan="7">'.$strMes.'</tr>
<tr>
<td>Lun</td>
<td>Mar</td>
<td>Mie</td>
<td>Jue</td>
<td>Vie</td>
<td>Sab</td>
<td>Dom</td>
</tr>
<tr>';
for($i=0;$i<7;$i++){
if($i<$numDiaSemana){
//si el dia de la semana i es menor que el numero del primer dia de la semana
//no pongo nada en la celda
$estruct .= '
<td></td>';
}else{
//ponemos el numero del dia
if($diaMes == $currentDay){
$estruct .= '
<td class="current">'.$diaMes.'</td>';
}else{
$estruct .= '
<td>'.$diaMes.'</td>';
}
$diaMes++;
}
}
$estruct .= '
</tr>';
$setPos = 0;
//recorremos los demas dias
while($diaMes <= $ultimoDia){
//si empieza la semana escribimos una nueva linea
if ($setPos == 0){
$estruct .= '<tr>';
}
if($diaMes == $currentDay){
$estruct .= '
<td class="current">'.$diaMes.'</td>';
}else{
$estruct .= '
<td>'.$diaMes.'</td>';
}
$diaMes++;
$setPos++;
//chequeamos que no si setPos llego al final de la fila
if ($setPos == 7){
$setPos = 0;
$estruct .= '</tr>';
}
}
return $estruct;
}else{
$error = 'error: Debe ingresar un numero del 1 al 12';
}
}else{
$error = 'el dato debe ser un numero';
return $error;
}
}
function switchMes ($mes){
switch($mes){
case 1: $retMes = 'Enero'; break;
case 2: $retMes = 'Febrero'; break;
case 3: $retMes = 'Marzo'; break;
case 4: $retMes = 'Abril'; break;
case 5: $retMes = 'Mayo'; break;
case 6: $retMes = 'Junio'; break;
case 7: $retMes = 'Julio'; break;
case 8: $retMes = 'Agosto'; break;
case 9: $retMes = 'Septiembre'; break;
case 10: $retMes = 'Octubre'; break;
case 11: $retMes = 'Noviembre'; break;
case 12: $retMes = 'Diciembre'; break;
}
return $retMes;
}
function numSemana ($dia,$mes,$anio){
$intSem = date('w', mktime(0,0,0,$mes,$dia,$anio));
if($intSem == 0){
$intSem = 6;
}else{
$intSem--;
}
return $intSem;
}
function getLastDay ($mes,$anio){
$ultimo_dia=28;
// mientras sea true se comprueba, si el mes tiene mas de 28 dias va a umentar sino frena la cuenta en el ultimo numero
while (checkdate($mes,$ultimo_dia + 1,$anio)){
$ultimo_dia++;
}
return $ultimo_dia;
}
function checkMes ($mes){
if(is_int($mes)){
if($mes >0 || $mes <=12){
return TRUE;
}else{
$error = 'El mes debe ser un numero del 1 al 12';
}
}else{
$error = 'El mes debe ser un numero';
}
return $error;
}
}