|
Bueno a lo mejor muchos se han visto en este problema de crear calendario para mantener las cosas y realizar consultas a BDatos obtniendo las mismas por fechas. El calendario Consta de 4 funciones básicas: Código PHP: DiaSemana($dia,$mes,$ano); NombreMes($mes); ultimoDia($mes,$ano); Calendar($mes,$ano);
En la función DiaSemana($dia,$mes,$ano) lo que hacemos es devolver el día de la semana numéricamente, o sea, 1,2,3,4,5,6,7 según corresponda. Código PHP: function DiaSemana($dia,$mes,$ano){ $numerodiasemana = date('w', mktime(0,0,0,$mes,$dia,$ano)); if($numerodiasemana == 0){ $numerodiasemana = 6; } else { $numerodiasemana--; } return $numerodiasemana; }
En la función NombreMes($mes) lo que hacemos es darle nombre a los meses ya que la función date() de PHP los devuelve pero en Inglés. Código PHP: function NombreMes($mes){ switch ($mes){ case 1: $nombre = "Ene"; break; case 2: $nombre = "Feb"; break; case 3: $nombre = "Mar"; break; case 4: $nombre = "Abr"; break; case 5: $nombre = "May"; break; case 6: $nombre = "Jun"; break; case 7: $nombre = "Jul"; break; case 8: $nombre = "Ago"; break; case 9: $nombre = "Sep"; break; case 10: $nombre = "Oct"; break; case 11: $nombre = "Nov"; break; case 12: $nombre = "Dic"; break; } return $nombre; }
En la función ultimoDia($mes,$ano) lo que hacemos es calcular el último día que tiene el mes con el cual estamos construyendo el calendario para así construir la tabla con todos los días. Código PHP: function ultimoDia($mes,$ano){ $ultimo_dia=28; while (checkdate($mes,$ultimo_dia + 1,$ano)){ $ultimo_dia++; } return $ultimo_dia; }
Código PHP: # Calendario de meses function Calendar($mes,$ano){ $nombremes = NombreMes($mes); $mes_anterior = $mes - 1; $ano_anterior = $ano; if ($mes_anterior == 0){ $ano_anterior--; $mes_anterior = 12; } $mes_siguiente = $mes + 1; $ano_siguiente = $ano; if ($mes_siguiente==13){ $ano_siguiente++; $mes_siguiente=1; } echo "<table width='100' border='0' cellspacing='0' cellpadding='0' align='center'>"; echo "</table>"; echo "<table width='100' border='0' cellspacing='0' cellpadding='0' align='center' class='calendar'>"; echo "<tr><td colspan='7' class='normal fontbig bold alterno calendar' align='center'><a href='".basename($_SERVER['PATH_TRANSLATED'])."?mes=".($mes_anterior)."&ano=".($ano_anterior)."&sid=".session_id()."'><< </a> ".$nombremes." ".$ano." <a href='".basename($_SERVER['PATH_TRANSLATED'])."?mes=".($mes_siguiente)."&ano=".($ano_siguiente)."&sid=".session_id()."'>>> </a></td></tr>"; echo "<tr>"; echo "<td align='center' bgcolor='#F0F8FE'>D</td>"; echo "<td align='center' bgcolor='#F0F8FE'>L</td>"; echo "<td align='center' bgcolor='#F0F8FE'>M</td>"; echo "<td align='center' bgcolor='#F0F8FE'>M</td>"; echo "<td align='center' bgcolor='#F0F8FE'>J</td>"; echo "<td align='center' bgcolor='#F0F8FE'>V</td>"; echo "<td align='center' bgcolor='#F0F8FE'>S</td>"; echo "</tr>"; $dia_actual = 1; $numero_dia = DiaSemana(1,$mes,$ano); $ultimo_dia = ultimoDia($mes,$ano); $diaact = date("d"); $mesact = date("m"); $anoact = date("Y"); echo "<tr>"; for($i=-1;$i<6;$i++){ if(($dia_actual<=$diaact) && ($mes<=$mesact) && ($ano<=$anoact)){ $bgcolor = "#F0F8FE"; }elseif(($dia_actual>$diaact) && ($mes>=$mesact) || ($ano>$anoact)){ $bgcolor = "#D8D8D8"; }elseif ($mes>$mesact){ $bgcolor = "#D8D8D8"; } if(($dia_actual<=$diaact) && ($mes<=$mesact) && ($ano<=$anoact)){ $enlace = "calendar.php?action=show&dia=".$dia_actual."&mes=".$mes."&ano=".$ano."&sid=".session_id().""; }else{ $enlace = ""; } if($i < $numero_dia){ echo "<td class='calendar' bgcolor='#D8D8D8'> </td>"; }else{ echo "<td align='center' bgcolor='".$bgcolor."'><a href=".$enlace."><span class='info' title='Mostrar contenido de ".($dia_actual."-".$mes."-".$ano)."'>".$dia_actual."</span></a></td>"; $dia_actual++; } } echo "</tr>"; $numero_dia = 0; while($dia_actual <= $ultimo_dia){ if(($dia_actual<=$diaact) && ($mes<=$mesact) && ($ano<=$anoact)){ $bgcolor = "#F0F8FE"; }elseif(($dia_actual>$diaact) && ($mes>=$mesact) || ($ano>$anoact)){ $bgcolor = "#D8D8D8"; }elseif ($mes>$mesact){ $bgcolor = "#D8D8D8"; } if(($dia_actual<=$diaact) && ($mes<=$mesact) && ($ano<=$anoact)){ $enlace = "calendar.php?action=show&dia=".$dia_actual."&mes=".$mes."&ano=".$ano."&sid=".session_id().""; }else{ $enlace = ""; } if ($numero_dia == 0) echo "<tr>"; echo "<td align='center' bgcolor='".$bgcolor."'><a href=".$enlace."><span class='info' title='Mostrar contenido de ".($dia_actual."-".$mes."-".$ano)."'>".$dia_actual."</span></a></td>"; $dia_actual++; $numero_dia++; if ($numero_dia == 7){ $numero_dia = 0; echo "</tr>"; } } for ($i=$numero_dia;$i<7;$i++){ echo "<td bgcolor='#D8D8D8'> </td>"; } echo "</tr>"; echo "</table>"; }
Se usa de esta forma. Si la tienes en un archivo externo al tuyo, donde vas a usar la función sería algo como esto: Código PHP: include("calendar-functions.php"); $mes = isset($_GET['mes'])?$_GET['mes']:date("m"); $ano = isset($_GET['ano'])?$_GET['ano']:date("Y"); Calendar($mes,$ano);
sino simplemente sería esto: Código PHP: $mes = isset($_GET['mes'])?$_GET['mes']:date("m"); $ano = isset($_GET['ano'])?$_GET['ano']:date("Y"); Calendar($mes,$ano);
|