Ya esta modificado, vuelvo adjuntar todo el código en un solo archivo para que lo puedan usar ..
Al ingresar una fecha al calendario solo ingresar el año y el mes, el formato debe ser este 2013-04 Y-m
Código PHP:
Ver original<?php
class Calendario
{
private $fecha;
private $mes;
private $hoy;
private $w;
private $eventos = array();
public function __CONSTRUCT($fecha = null)
{
// La fecha ingresada
$this->fecha = new DateTime($fecha);
// La cantidad de dias del mes
$this->mes = $this->fecha->format('t');
// La fecha de hoy
$this->hoy = new DateTime
(date('ymd')); // El valor numerico de la semana del primer dia del mes
$this->w = $this->fecha->format('w');
// Restamos para saber desde donde va a empezar a pintar, por ejemplo
// si comienza un miercoles, debe dejar 3 cuadros vacios atraz
$this->w = $this->w > 0 ? -$this->w + 1 : 0;
}
public function setEvento(Evento $evento)
{
$this->eventos[] = $evento;
}
public function Pintar()
{
// Clonamos el objeto DateTime para ser modificado
$fecha_navegacion = clone $this->fecha;
// Un mes atraz
echo '<a href="?f=' . $fecha_navegacion->modify('-1 month')->format('Y-m') . '">' . $fecha_navegacion->format('Y F') . '</a> - ';
// Un mes adelante
echo '<a href="?f=' . $fecha_navegacion->modify('+2 month')->format('Y-m') . '">' . $fecha_navegacion->format('Y F') . '</a>';
// Armamos el calendario
echo '<table class="calendario">';
echo '
<tr>
<th class="mes" colspan="7">' . ($this->fecha->format('F')) . '</th>
</tr>
<tr>
<th>Domingo</th>
<th>Lunes</th>
<th>Martes</th>
<th>Miercoles</th>
<th>Jueves</th>
<th>Viernes</th>
<th>Sabado</th>
</tr>
';
// Con esto sabemos cuando hacer un TR
$i=0;
for($this->w;$this->w<=$this->mes;$this->w++)
{
echo ($i == 0) ? '<tr>' : '';
echo ($i%7 == 0 && $i > 0) ? '</tr><tr>' : '';
if($this->w<=0)
{
echo '<td></td>';
}else
{
echo '<td ' . ($this->hoy->format('ymj') == $this->fecha->format('ym') . $this->w ? 'class="hoy"' : '') . '>'; // Si el dia es hoy
// Pintamos el dia actual
echo '<span class="dia">' . $this->w . '</span>';
// Agregar los eventos
foreach($this->eventos as $e)
{
if($e->getFecha()->format('ymj') == $this->fecha->format('ym') . $this->w)
{
echo '<div class="evento">';
echo '- <a href="#" class="asunto">' . $e->getAsunto() . '</a> ';
echo 'programado para las ' . $e->getHora() . ' por <b>' . $e->getCreador() . '</b>';
echo '</div>';
}
}
echo '</td>';
}
$i++;
}
echo '</table>';
}
}
class Evento
{
private $fecha;
private $hora;
private $creador;
private $asunto;
public function getFecha() { return $this->fecha; }
public function getHora() { return $this->hora; }
public function getCreador() { return $this->creador; }
public function getAsunto() { return $this->asunto; }
public function setFecha($x)
{
$this->fecha = new DateTime($x);
$this->hora = $this->fecha->format('h:ia');
}
public function setCreador($x) { $this->creador = $x; }
public function setAsunto($x) { $this->asunto = $x; }
}
// Instanciamos el calendario
$c = new Calendario
(isset($_GET['f']) ?
$_GET['f'] : date('Y-m'));
// Seteamos un evento
$e = new Evento();
$e->setFecha('2013-04-16 14:02:00');
$e->setCreador('HiToGoRoShi');
$e->setAsunto('Reunion en con nuestro cliente');
$c->setEvento($e);
// Seteamos otro evento
$e = new Evento();
$e->setFecha('2013-04-18 14:07:00');
$e->setCreador('Kenshin');
$e->setAsunto('Capacitacion en sistema');
$c->setEvento($e);
// Seteamos otro evento
$e = new Evento();
$e->setFecha('2013-04-18 14:15:00');
$e->setCreador('Raul');
$e->setAsunto('Reunion con los proveedores');
$c->setEvento($e);
// Seteamos otro evento
$e = new Evento();
$e->setFecha('2013-04-24 14:16:00');
$e->setCreador('Pepe');
$e->setAsunto('Cena con los empleados');
$c->setEvento($e);
// Seteamos otro evento
$e = new Evento();
$e->setFecha('2013-05-17 14:16:00');
$e->setCreador('Pepe');
$e->setAsunto('Cena con los empleados');
$c->setEvento($e);
?>
<!DOCTYPE html>
<html>
<head>
<title>Calendario de eventos creado por HiToGoRoShi</title>
<link href="calendario.css" rel="stylesheet" />
</head>
<body>
<h1>Calendario de eventos creado por HiToGoRoShi</h1>
<?php $c->Pintar(); ?>
</body>
</html>
El ejemplo en linea lo vemos acá
http://kimsa-media.com/calendario/
Me gustaría poder modificar el primer tema para no traer confusiones