Pregunta:
Fecha: 02-10-2015 11:27:41
(En Español)
Buenas tardes
Hice un calendario solo con PHP
(Expongo el scrip al final para quien lo quiera utilizar y modificar, falta css, puse lo indispensable, tambien esta documentado).
El mismo tiene la forma que todos imaginamos (Una cabecera que cambia los meses y el año, otra por debajo con los dias de la semana), hasta aqui, vamos bien, funciona como esperaba.
He aqui mi problema ... en mi desarrollo, necesito presentarlo de manera horizontal, lo cual tambien hice y funciona, pero tengo problemas con su ESTETICA que NECESITO AYUDA.
El <thead> lo hice asi:
Al poner el calendario de manera horizontal, aparecen celdas con contenido en blanco (Las pinte de negro ... Je).
A continuacion dejo el script:
El primero son las funciones, para ambos es igual, el segundo es el que funciona de manera esperada y el tercero es el CALENDARIO HORIZONTAL con el cual tengo problemas.
FUNCIONES
CALENDARIO NORMAL
CALENDARIO HORIZONTAL (SOS)
Agradeceria mucho a quienes puedan darme una orientacion
Un saludo
Daniel Votos: 0 - Respuestas: 1 - Vistas: 14 Compartir en: Google Facebook Twitter LinkedIn Link
CALENDARIO[No resuelta]
Gente de PHPBuenas tardes
Hice un calendario solo con PHP
(Expongo el scrip al final para quien lo quiera utilizar y modificar, falta css, puse lo indispensable, tambien esta documentado).
El mismo tiene la forma que todos imaginamos (Una cabecera que cambia los meses y el año, otra por debajo con los dias de la semana), hasta aqui, vamos bien, funciona como esperaba.
He aqui mi problema ... en mi desarrollo, necesito presentarlo de manera horizontal, lo cual tambien hice y funciona, pero tengo problemas con su ESTETICA que NECESITO AYUDA.
El <thead> lo hice asi:
<?php
for ($i=0; $i <= $nn; $i++) {
echo '<th>Do</th>
<th>Lu</th>
<th>Ma</th>
<th>Mi</th>
<th>Ju</th>
<th>Vi</th>
<th>Sa</th>';
}
?>
Al poner el calendario de manera horizontal, aparecen celdas con contenido en blanco (Las pinte de negro ... Je).
A continuacion dejo el script:
El primero son las funciones, para ambos es igual, el segundo es el que funciona de manera esperada y el tercero es el CALENDARIO HORIZONTAL con el cual tengo problemas.
FUNCIONES
<?php
/**
* Funcion verificar_feriados, tiene 2 parametos, variable $dia, $mes
* @param [day] $dia [numero del dia]
* @param [month] $mes [numero del mes]
* @return [type] [description]
*/
function verificar_feriados ($dia, $mes){
//Asumo que toda fecha que recibo NO ES FERIADO
/**
* $es_feriado su valor inicial es FALSO
* @var boolean
*/
$es_feriado = false;
/**
* La variable fecha me da como resultado un string day-month
* @var string
*/
$fecha = "$dia-$mes";
/**
* Si hay FERIADOS los obtengo de switch
*/
/**
* Obtengo jueves y viernes SANTO
* @var [string]
*/
$jueves_santo = strtotime("-3 days", easter_date(2015));
$fecha_jueves_santo = (date("d", $jueves_santo)*1).'-'.(date("m", $jueves_santo)*1);
$viernes_santo = strtotime("-2 days", easter_date(2015));
$fecha_viernes_santo = (date("d", $viernes_santo)*1).'-'.(date("m", $viernes_santo)*1);
switch ($fecha) {
case '1-1':
case '1-4':
case '24-3':
case '1-4':
case '2-4':
case '1-5':
case '25-5':
case '20-6':
case '9-7':
case '17-8':
case '11-9':
case '21-9':
case '12-10':
case '8-12':
case '25-12':
case $fecha_jueves_santo:
case $fecha_viernes_santo:
$es_feriado = true;
break;
}
return $es_feriado;
}
/**
* Cantidad de dias y Nombre de cada mes
* @param [int] $numero [cantidad de dias de un mes]
* @param [bool] $bool [description]
* @return [string] [nombre del mes]
*/
function evaluar_mes ($numero, $bool){
switch ($numero) {
case 1: $cantidad_dias = 31; $nombre = 'Enero'; break;
case 2: $cantidad_dias = 28; $nombre = 'Febrero'; break;
case 3: $cantidad_dias = 31; $nombre = 'Marzo'; break;
case 4: $cantidad_dias = 30; $nombre = 'Abril'; break;
case 5: $cantidad_dias = 31; $nombre = 'Mayo'; break;
case 6: $cantidad_dias = 30; $nombre = 'Junio'; break;
case 7: $cantidad_dias = 31; $nombre = 'Julio'; break;
case 8: $cantidad_dias = 31; $nombre = 'Agosto'; break;
case 9: $cantidad_dias = 30; $nombre = 'Septiembre'; break;
case 10: $cantidad_dias = 31; $nombre = 'Octubre'; break;
case 11: $cantidad_dias = 30; $nombre = 'Noviembre'; break;
case 12: $cantidad_dias = 31; $nombre = 'Diciembre'; break;
}
if ($bool == true) {
return $cantidad_dias;
}else{
return $nombre;
}
}CALENDARIO NORMAL
<?php
$numero_mes = (isset($_GET['mes']) ? $_GET['mes']:date('m'))*1;
$numero_anio = isset($_GET['anio']) ? $_GET['anio']:date('Y');
include('funciones.php');
/**
* Botones para correr mes hacia adelante y hacia atras
*/
//datos anteriores
$numero_mes_anterior = $numero_mes - 1;
$numero_anio_anterior = $numero_anio;
if ($numero_mes_anterior <= 0) {//cero es el anterior de Enero
$numero_mes_anterior = 12; // salto Diciembre
$numero_anio_anterior = $numero_anio_anterior - 1;
}
//datos siguiente
$numero_mes_siguiente = $numero_mes + 1;
$numero_anio_siguiente = $numero_anio;
if ($numero_mes_siguiente >= 13) {//estoy por encima de Diciembre
$numero_mes_siguiente = 1; // vuelve a Enero
$numero_anio_siguiente++;
}
$cantidad_dias = evaluar_mes ($numero_mes, true);
$nombre_mes = evaluar_mes ($numero_mes, false);
/**
* Obtengo el 1er dia de la semana
* @var [date]
* mktime recibe 6 argumentos(hora, minuto, segundo, mes, dia, año) y me da como resultado
* los segundos trasncurridos desde 01-01-1970 -
* "w" representa el numero del dia de la semana que debe cumplirse esa fecha
*/
$timestamp = mktime(0, 0, 0, $numero_mes, 1, $numero_anio);
$saltear = date("w", $timestamp);
$cantidad_dias += $saltear;
/**
* Obtengo la cantidad de filas por semana
* @var [bool]
* $fila = Cantidad_dias / 7 | Resultado = cantidad de filas que se generan
* IMPORTANE:
* Si el resultado en un numero "ENTERO", se completan todas las celdas generadas
* Si el resultado "NO ES ENTERO", nos faltan celdas para completar alguna fila
* Funcion "ceil" se encarga de darme el proximo valor entero si existe un numero decimal
* $cantidad_celdas = Multiplico las $filas obtenidas * 7 | Resultado = la cantidad de celdas que tendria que generarse
* (Completas e incompletas)
* $diferencia = la cantidad de celdas que me faltan para completar una fila
*/
$fila = ceil ($cantidad_dias / 7);
$cantidad_celdas = $fila * 7;
$diferencia = $cantidad_celdas - $cantidad_dias;
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>CALENDARIO PHP</title>
</head>
<style type="text/css">
a{
color: #FFFFFF;
}
#feriado{
color: #FF0000;
font-size: 14px;
}
table, thead, tfoot, tbody, td, th {
border: 1px solid green;
text-align: center;
}
thead{
background-color: #000000;
color: #FFFFFF;
}
/*tbody{
background-color: red;*/
}
th {
color: #FFFFFF;
text-align: center;
}
</style>
<body>
<table class="feriados">
<thead>
<tr>
<th><a href="calendario_1.php?anio=<?php echo $numero_anio_anterior; ?>&mes=<?php echo $numero_mes_anterior; ?>"><<</th>
<th colspan="5"><?php echo $nombre_mes; ?> <?php echo $numero_anio; ?></th>
<th><a href="calendario_1.php?mes=<?php echo $numero_mes_siguiente; ?>&anio=<?php echo $numero_anio_siguiente; ?>">>></a></th>
</tr>
<tr>
<th style="background-color: #FF0000;">Do</th>
<th>Lu</th>
<th>Ma</th>
<th>Mi</th>
<th>Ju</th>
<th>Vi</th>
<th style="background-color: #CCCCFF;">Sa</th>
</tr>
</thead>
<tbody class="#feriado">
<tr>
<?php
for ($i=1; $i <= $cantidad_dias; $i++) {
if ($i <= $saltear) {
echo "<td style='background-color: #000000; color: #FFFFFF;'></td>";
}else{
$num_dia = $i - $saltear;
$feriado = verificar_feriados ($num_dia, $numero_mes);
if ($feriado == true) {
$css = " style='background-color: #FFCCCC; color: #FFFFFF;'";
}else{
$css = '';
}
echo '<td'.$css.'>'.$num_dia.'</td>';
}
if ($i % 7 == 0) {
echo '<tr></tr>';
}
}
for ($i=1; $i <= $diferencia; $i++) {
echo "<td style='background-color: #000000; color: #FFFFFF;'></td>";
}
?>
</tr>
</tbody>
</table>
</body>
</html>CALENDARIO HORIZONTAL (SOS)
<?php
$numero_mes = (isset($_GET['mes']) ? $_GET['mes']:date('m'))*1;
$numero_anio = isset($_GET['anio']) ? $_GET['anio']:date('Y');
include('funciones.php');
/**
* Botones para correr mes hacia adelante y hacia atras
*/
//datos anteriores
$numero_mes_anterior = $numero_mes - 1;
$numero_anio_anterior = $numero_anio;
if ($numero_mes_anterior <= 0) {//cero es el anterior de Enero
$numero_mes_anterior = 12; // salto Diciembre
$numero_anio_anterior = $numero_anio_anterior - 1;
}
//datos siguiente
$numero_mes_siguiente = $numero_mes + 1;
$numero_anio_siguiente = $numero_anio;
if ($numero_mes_siguiente >= 13) {//estoy por encima de Diciembre
$numero_mes_siguiente = 1; // vuelve a Enero
$numero_anio_siguiente++;
}
$cantidad_dias = evaluar_mes ($numero_mes, true);
$nombre_mes = evaluar_mes ($numero_mes, false);
/**
* Obtengo el 1er dia de la semana
* @var [date]
* mktime recibe 6 argumentos(hora, minuto, segundo, mes, dia, año) y me da como resultado
* los segundos trasncurridos desde 01-01-1970 -
* "w" representa el numero del dia de la semana que debe cumplirse esa fecha
*/
$timestamp = mktime(0, 0, 0, $numero_mes, 1, $numero_anio);
$saltear = date("w", $timestamp);
$cantidad_dias += $saltear;
/**
* Obtengo la cantidad de filas por semana
* @var [bool]
* $fila = Cantidad_dias / 7 | Resultado = cantidad de filas que se generan
* IMPORTANE:
* Si el resultado en un numero "ENTERO", se completan todas las celdas generadas
* Si el resultado "NO ES ENTERO", nos faltan celdas para completar alguna fila
* Funcion "ceil" se encarga de darme el proximo valor entero si existe un numero decimal
* $cantidad_celdas = Multiplico las $filas obtenidas * 7 | Resultado = la cantidad de celdas que tendria que generarse
* (Completas e incompletas)
* $diferencia = la cantidad de celdas que me faltan para completar una fila
*/
$fila = ceil ($cantidad_dias / 7);
$cantidad_celdas = $fila * 7;
$diferencia = $cantidad_celdas - $cantidad_dias;
$nn = $cantidad_dias / 7;
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<style type="text/css">
a{
color: #FFFFFF;
}
#feriado{
color: #FF0000;
font-size: 14px;
}
table, thead, tfoot, tbody, td, th {
border: 1px solid green;
text-align: center;
}
thead{
background-color: #000000;
color: #FFFFFF;
}
/*tbody{
background-color: red;*/
}
th {
color: #FFFFFF;
text-align: center;
}
</style>
<body>
<table class="feriados">
<thead>
<tr>
<th><a href="calendario_2_horizontal.php?anio=<?php echo $numero_anio_anterior; ?>&mes=<?php echo $numero_mes_anterior; ?>"><<</th>
<th colspan="5"><?php echo $nombre_mes; ?> <?php echo $numero_anio; ?></th>
<th><a href="calendario_2_horizontal.php?mes=<?php echo $numero_mes_siguiente; ?>&anio=<?php echo $numero_anio_siguiente; ?>">>></a></th>
</tr>
</tr>
<tr>
<?php
for ($i=0; $i <= $nn; $i++) {
echo '<th>Do</th>
<th>Lu</th>
<th>Ma</th>
<th>Mi</th>
<th>Ju</th>
<th>Vi</th>
<th>Sa</th>';
}
?>
</tr>
</thead>
<tfoot>
</tfoot>
<tbody>
<tr>
<?php
for ($i=1; $i <= $cantidad_dias; $i++) {
if ($i <= $saltear) {
echo "<td style='background-color: #000000; color: #FFFFFF;'></td>";
}else{
$num_dia = $i - $saltear;
$feriado = verificar_feriados ($num_dia, $numero_mes);
if ($feriado == true) {
$css = " style='background-color: #FFCCCC; color: #FFFFFF;'";
}else{
$css = '';
}
echo '<td'.$css.'>'.$num_dia.'</td>';
}
if ($i == 0 ) {
echo '<tr></tr>';
}
}
for ($i=1; $i <= $diferencia; $i++) {
echo "<td style='background-color: #000000; color: #FFFFFF;'></td>";
}
?>
</tr>
</tbody>
</table>
</body>
</html>Agradeceria mucho a quienes puedan darme una orientacion
Un saludo
Daniel Votos: 0 - Respuestas: 1 - Vistas: 14 Compartir en: Google Facebook Twitter LinkedIn Link
Respuestas:
-
Fecha: 04-10-2015 09:58:45 Gente de PHP
He resuelto el tema, pero como pienso seguir ampliando el script, dejare la pregunta abierta.
Ustedes por ahi se preguntaran ¿Porque este hombre no toma un calendario de los que hay por ahi?
La idea es hacer un planning con PHP y MySQL, como debo guardar informacion y administrarla, nada mejor que uno tener el control total del calendario.
Les dejo mis script
Nombre: Calendario de Kalofa
Lenguajes: PHP, CSS
Documentacion: Dentro de cada Script
Hice 2 Versiones
.- Version Convencional
.- Version Horizontal (Mi objetivo)
En ambas cuenta con:
.- Feriados Nacionales (Argentina - Es Costumisable desde funciones feriados)
.- Feriados Nacionales - Color (Es Costumisable desde CSS)
.- Sabados - Color (Es Costumisable desde CSS)
.- Domingos - Color (Es Costumisable desde CSS)
.- Botonera: Cambia los meses y año
.- Tiene en cuenta los años Bisiestos
Aqui abajo les dejo el codigo:
CSS
<style type="text/css" > a{ color: #FFFFFF; } table, thead, tfoot, tbody, td, th { border: 1px solid #000000; border-collapse: collapse; text-align: center; font-family: Helvetica; font-size: 18px; padding:7px; } thead{ background-color: #C0C0C0; color: #FFFFFF; } th { color: #FFFFFF; text-align: center; } th.boton { background-color: #000000; color: #FFFFFF; text-align: center; } th.boton a { color: #FFFFFF; } div.centerTable{ text-align: center; border:1px ; border-radius: 10px; padding:20px; text-align: center; width: auto ; } div.centerTable table { margin: 0 auto; text-align: left; } td.feriado{ background-color: #0000FF; color: #FFFFFF; } td.domingo{ background-color: #FF0000; color: #FFFFFF; } td.sabado{ background-color: #00FFFF; color: #000000; } td.nula{ background-color: #000000; } </style>
FUNCIONES
<?php /**------------------------------------------------------------------- * Funcion verificar_feriados, tiene 2 parametos, variable $dia, $mes * @param [day] $dia [numero del dia] * @param [month] $mes [numero del mes] * @return [type] [description] */ function verificar_feriados ($dia, $mes){ //Asumo que toda fecha que recibo NO ES FERIADO /** * $es_feriado su valor inicial es FALSO * @var boolean */ $es_feriado = false; /** * La variable fecha me da como resultado un string day-month * @var string */ $fecha = "$dia-$mes"; /** * Si hay FERIADOS los obtengo de switch */ /** * Obtengo jueves y viernes SANTO * @var [string] */ $jueves_santo = strtotime("-3 days", easter_date(2015)); $fecha_jueves_santo = (date("d", $jueves_santo)*1).'-'.(date("m", $jueves_santo)*1); $viernes_santo = strtotime("-2 days", easter_date(2015)); $fecha_viernes_santo = (date("d", $viernes_santo)*1).'-'.(date("m", $viernes_santo)*1); switch ($fecha) { case '1-1': case '1-4': case '24-3': case '1-4': case '2-4': case '1-5': case '25-5': case '20-6': case '9-7': case '17-8': case '11-9': case '21-9': case '12-10': case '8-12': case '25-12': case $fecha_jueves_santo: case $fecha_viernes_santo: $es_feriado = true; break; } return $es_feriado; } /**------------------------------------------------- * Funcion Cantidad de dias de cada mes * @param [int] $numero [cantidad de dias de un mes] * @param [bool] $bool [description] */ function evaluar_mes ($n_ano, $bool){ if (isset($numero_anio)){ $bisiesto = (($numero_anio % 4 == 0) && (($numero_anio % 100 != 0) || ($numero_anio % 400 == 0))); switch($n_ano){ case 1: $cantidad_dias = 31; $nombre = 'Enero'; break; case 2: if ($bisiesto == true){ return $cantidad_dias = 29; $nombre = 'Febrero'; break; }else{ return $cantidad_dias = 28; $nombre = 'Febrero'; break; } case 3: $cantidad_dias = 31; break; case 4: $cantidad_dias = break; case 5: $cantidad_dias = break; case 6: $cantidad_dias = break; case 7: $cantidad_dias = break; case 8: $cantidad_dias = break; case 9: $cantidad_dias = break; case 10: $cantidad_dias = break; case 11: $cantidad_dias = break; case 12: $cantidad_dias = break; } if ($bool == true){ return $cantidad_dias; } } } /**---------------------------------------------- * Funcion Nombre del mes * @param [int] $numero [description] * @param [bool] $bool [description] * @return [type] [description] */ function evaluar_nombre_mes ($n_mes $bool){ switch ($n_mes) { case 1: $nombre = 'Enero'; break; case 2: $nombre = 'Febrero'; break; case 3: $nombre = 'Marzo'; break; case 4: $nombre = 'Abril'; break; case 5: $nombre = 'Mayo'; break; case 6: $nombre = 'Junio'; break; case 7: $nombre = 'Julio'; break; case 8: $nombre = 'Agosto'; break; case 9: $nombre = 'Septiembre'; break; case 10: $nombre = 'Octubre'; break; case 11: $nombre = 'Noviembre'; break; case 12: $nombre = 'Diciembre'; break; } if ($bool == true) { return $nombre; } } /**------------------------------------------------------------------ * Funcion verificar_domingo, tiene 2 parametos, variable $dia, $mes * @param [day] $dia [numero del dia] * @param [month] $mes [numero del mes] * @return [type] [description] */ function verificar_domingo ($dia, $mes){ //Asumo que toda fecha que recibo NO ES DOMINGO /** * Por eso $es_domingo su valor inicial es FALSO * @var boolean */ $es_domingo = false; /** * La variable fecha me da como resultado un string day-month * @var string */ $numero_anio = isset($_GET['anio']) ? $_GET['anio']:date('Y'); $fecha = "$dia"; $timestamp = mktime(0, 0, 0, $mes, $dia, $numero_anio); $fecha = date("w", $timestamp); /** * Si hay DOMINGO los obtengo de switch */ switch ($fecha) { case 0: $es_domingo = true; break; } return $es_domingo; } /**------------------------------------------------------------------ * Funcion verificar_sabado, tiene 2 parametos, variable $dia, $mes * @param [day] $dia [numero del dia] * @param [month] $mes [numero del mes] * @return [type] [description] */ function verificar_sabado ($dia, $mes){ //Asumo que toda fecha que recibo NO ES SABADO /** * Por eso $es_sabado su valor inicial es FALSO * @var boolean */ $es_sabado = false; /** * La variable fecha me da como resultado un string day-month * @var string */ $numero_anio = isset($_GET['anio']) ? $_GET['anio']:date('Y'); $fecha = "$dia"; $timestamp = mktime(0, 0, 0, $mes, $dia, $numero_anio); $fecha = date("w", $timestamp); /** * Si hay SABADO los obtengo de switch */ switch ($fecha) { case 6: $es_sabado = true; break; } return $es_sabado; }
CALENDARIO HORIZONTAL
<?php //Establecemos zona horaria por defecto date_default_timezone_set('America/Argentina/Buenos_Aires'); //preguntamos la zona horaria /* $zonahoraria = date_default_timezone_get(); echo 'Zona horaria predeterminada: ' . $zonahoraria;*/ $bisiesto = (($_GET['anio'] % 4 == 0) && (($_GET['anio'] % 100 != 0) || ($_GET['anio'] % 400 == 0))); $numero_mes = (isset($_GET['mes']) ? $_GET['mes']:date('m'))*1; $numero_anio = isset($_GET['anio']) ? $_GET['anio']:date('Y'); include('funciones.php'); /** * Botones para correr mes hacia adelante y hacia atras */ //datos anteriores $numero_mes_anterior = $numero_mes - 1; $numero_anio_anterior = $numero_anio; if ($numero_mes_anterior <= 0) {//cero es el anterior de Enero $numero_mes_anterior = 12; // salto Diciembre $numero_anio_anterior = $numero_anio_anterior - 1; } //datos siguiente $numero_mes_siguiente = $numero_mes + 1; $numero_anio_siguiente = $numero_anio; if ($numero_mes_siguiente >= 13) {//estoy por encima de Diciembre $numero_mes_siguiente = 1; // vuelve a Enero $numero_anio_siguiente++; } /** * Cantidad de dias que tiene un mes * Recupero el parametro que viene por medio de la variable $_GET['mes'] * Si es Verdadero (True) lo compara el valor en la funcion evaluar_mes, asi obtengo la cantidad de dias que tiene un mes * CEIL es un funcion de PHP que me transforma un numero decimal en un numero entero, redondiando hacia arriba */ $cantidad_dias = evaluar_mes ($numero_mes, true); /*$nombre_mes = evaluar_mes ($numero_mes, false);*/ $cantidad_col = ceil ($cantidad_dias - 2); /** * El nombre del mes del Encabezado * Recupero el parametro que viene por medio de la variable $_GET['mes'] * Si es Verdadero (True) lo compara el valor en la funcion evaluar_nombre_mes, asi obtengo el nombre del mes */ $nombre_del_mes = evaluar_nombre_mes ($numero_mes, true); /** * Obtengo el 1er dia de la semana * @var [date] * mktime recibe 6 argumentos(hora, minuto, segundo, mes, dia, año) y me da como resultado * los segundos trasncurridos desde 01-01-1970 - * "w" representa el numero del dia de la semana que debe cumplirse esa fecha */ $timestamp = mktime(0, 0, 0, $numero_mes, 1, $numero_anio); $saltear = date("w", $timestamp); $cantidad_dias += $saltear; $domingol = date("w", $timestamp); /** * Obtengo la cantidad de filas por semana * @var [bool] * $fila = Cantidad_dias / 7 | Resultado = cantidad de filas que se generan * IMPORTANE: * Si el resultado en un numero "ENTERO", se completan todas las celdas generadas * Si el resultado "NO ES ENTERO", nos faltan celdas para completar alguna fila * Funcion "ceil" se encarga de darme el proximo valor entero si existe un numero decimal * $cantidad_celdas = Multiplico las $filas obtenidas * 7 | Resultado = la cantidad de celdas que tendria que generarse * (Completas e incompletas) * $diferencia = la cantidad de celdas que me faltan para completar una fila */ $fila = ceil ($cantidad_dias / 7); $cantidad_celdas = $fila * 7; $diferencia = $cantidad_celdas - $cantidad_dias; ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>CALENDARIO HORIZONTAL</title> <link rel="stylesheet" href="css-cal.css"> </head> <body> <div class="centerTable"> <table> <thead> <tr> <th>Mov</th> <th class="boton"><a href="calendario_h.php?anio=<?php echo $numero_anio_anterior; ?>&mes=<?php echo $numero_mes_anterior; ?>"><<</th> <th colspan="<?php echo $cantidad_col; ?>"><?php echo $nombre_del_mes; ?> <?php echo $numero_anio; ?></th> <th class="boton"><a href="calendario_h.php?mes=<?php echo $numero_mes_siguiente; ?>&anio=<?php echo $numero_anio_siguiente; ?>">>></a></th> </tr> </tr> <tr> <td>Nº</td> <?php // ------------------------------------------------------------------------------------------------------ /** * Creo un array que me indique la posibilidad de celdas por dia de la semana */ $dias = array('','Do', 'Lu', 'Ma', 'Mi', 'Ju', 'Vi', 'Sa', 'Do', 'Lu', 'Ma', 'Mi', 'Ju', 'Vi', 'Sa', 'Do', 'Lu', 'Ma', 'Mi', 'Ju', 'Vi', 'Sa', 'Do', 'Lu', 'Ma', 'Mi', 'Ju', 'Vi', 'Sa', 'Do', 'Lu', 'Ma', 'Mi', 'Ju', 'Vi', 'Sa', 'Do', 'Lu', 'Ma', 'Mi', 'Ju', 'Vi', 'Sa', 'Do', 'Lu', 'Ma', 'Mi', 'Ju', 'Vi', 'Sa'); for ($i=1; $i <= $cantidad_dias; $i++) { if ($i <= $saltear) { echo ""; }else { $num_dia = $i - $saltear; $feriados = verificar_feriados ($num_dia, $numero_mes); $domingos = verificar_domingo ($num_dia, $numero_mes); $sabados = verificar_sabado ($num_dia, $numero_mes); if ($feriados == true) { $css = " "; }elseif ($domingos == true){ $css = " class='domingo'"; }elseif ($sabados == true){ $css = " class='sabado'"; }else{ $css = ''; } echo '<td'.$css.'>'.$dias[$i].'</td>'; } if ($i == 0 ) { echo '<tr></tr>'; } } // ------------------------------------------------------------------------------------------------------ ?> </tr> </thead> <tbody> <tr> <td>01</td> <?php for ($i=1; $i <= $cantidad_dias; $i++) { if ($i <= $saltear) { echo ""; }else{ $num_dia = $i - $saltear; $feriados = verificar_feriados ($num_dia, $numero_mes); $domingos = verificar_domingo ($num_dia, $numero_mes); $sabados = verificar_sabado ($num_dia, $numero_mes); if ($feriados == true) { $css = " class='feriado'"; }elseif ($domingos == true){ $css = " class='domingo'"; }elseif ($sabados == true){ $css = " class='sabado'"; }else{ $css = ''; } echo '<td'.$css.'>'.$num_dia.'</td>'; } if ($i == 0 ) { echo '<tr></tr>'; } } ?> </tr> </tbody> </table> </div> </body> </html> /code] CALENDARIO CONVENSIONAL [code=php] <?php //Establecemos zona horaria por defecto date_default_timezone_set('America/Argentina/Buenos_Aires'); //preguntamos la zona horaria /* $zonahoraria = date_default_timezone_get(); echo 'Zona horaria predeterminada: ' . $zonahoraria;*/ $bisiesto = (($_GET['anio'] % 4 == 0) && (($_GET['anio'] % 100 != 0) || ($_GET['anio'] % 400 == 0))); $numero_mes = (isset($_GET['mes']) ? $_GET['mes']:date('m'))*1; $numero_anio = isset($_GET['anio']) ? $_GET['anio']:date('Y'); include('funciones.php'); /** * Botones para correr mes hacia adelante y hacia atras */ //datos anteriores $numero_mes_anterior = $numero_mes - 1; $numero_anio_anterior = $numero_anio; if ($numero_mes_anterior <= 0) {//cero es el anterior de Enero $numero_mes_anterior = 12; // salto Diciembre $numero_anio_anterior = $numero_anio_anterior - 1; } //datos siguiente $numero_mes_siguiente = $numero_mes + 1; $numero_anio_siguiente = $numero_anio; if ($numero_mes_siguiente >= 13) {//estoy por encima de Diciembre $numero_mes_siguiente = 1; // vuelve a Enero $numero_anio_siguiente++; } /** * Cantidad de dias que tiene un mes * Recupero el parametro que viene por medio de la variable $_GET['mes'] * Si es Verdadero (True) lo compara el valor en la funcion evaluar_mes, asi obtengo la cantidad de dias que tiene un mes * CEIL es un funcion de PHP que me transforma un numero decimal en un numero entero, redondiando hacia arriba */ $cantidad_dias = evaluar_mes ($numero_mes, true); /*$nombre_mes = evaluar_mes ($numero_mes, false);*/ /** * El nombre del mes del Encabezado * Recupero el parametro que viene por medio de la variable $_GET['mes'] * Si es Verdadero (True) lo compara el valor en la funcion evaluar_nombre_mes, asi obtengo el nombre del mes */ $nombre_del_mes = evaluar_nombre_mes ($numero_mes, true); /** * Obtengo el 1er dia de la semana * @var [date] * mktime recibe 6 argumentos(hora, minuto, segundo, mes, dia, año) y me da como resultado * los segundos trasncurridos desde 01-01-1970 - * "w" representa el numero del dia de la semana que debe cumplirse esa fecha */ $timestamp = mktime(0, 0, 0, $numero_mes, 1, $numero_anio); $saltear = date("w", $timestamp); $cantidad_dias += $saltear; /** * Obtengo la cantidad de filas por semana * @var [bool] * $fila = Cantidad_dias / 7 | Resultado = cantidad de filas que se generan * IMPORTANE: * Si el resultado en un numero "ENTERO", se completan todas las celdas generadas * Si el resultado "NO ES ENTERO", nos faltan celdas para completar alguna fila * Funcion "ceil" se encarga de darme el proximo valor entero si existe un numero decimal * $cantidad_celdas = Multiplico las $filas obtenidas * 7 | Resultado = la cantidad de celdas que tendria que generarse * (Completas e incompletas) * $diferencia = la cantidad de celdas que me faltan para completar una fila */ $fila = ceil ($cantidad_dias / 7); $cantidad_celdas = $fila * 7; $diferencia = $cantidad_celdas - $cantidad_dias; ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>CALENDARIO PHP</title> <link rel="stylesheet" href="css-cal.css"> </head> <body> <table class="feriados"> <thead> <tr> <th class="boton"><a href="calendario_n.php?anio=<?php echo $numero_anio_anterior; ?>&mes=<?php echo $numero_mes_anterior; ?>"><<</th> <th class="boton" colspan="5"><?php echo $nombre_del_mes; ?> <?php echo $numero_anio; ?></th> <th class="boton"><a href="calendario_n.php?mes=<?php echo $numero_mes_siguiente; ?>&anio=<?php echo $numero_anio_siguiente; ?>">>></a></th> </tr> <tr> <th style="background-color: #FF0000; color: #FFFFFF;'">Do</th> <th>Lu</th> <th>Ma</th> <th>Mi</th> <th>Ju</th> <th>Vi</th> <th style="background-color: #00FFFF; color: #000000;">Sa</th> </tr> </thead> <tbody class="feriado"> <tr> <?php for ($i=1; $i <= $cantidad_dias; $i++) { if ($i <= $saltear) { echo "<td class='nula'></td>"; }else{ $num_dia = $i - $saltear; $feriado = verificar_feriados ($num_dia, $numero_mes); $domingos = verificar_domingo ($num_dia, $numero_mes); $sabados = verificar_sabado ($num_dia, $numero_mes); if ($feriado == true) { $css = " class='feriado'"; }elseif ($domingos == true){ $css = " class='domingo'"; }elseif ($sabados == true){ $css = " class='sabado'"; }else{ $css = ''; } echo '<td'.$css.'>'.$num_dia.'</td>'; } if ($i % 7 == 0) { echo '<tr></tr>'; } } for ($i=1; $i <= $diferencia; $i++) { echo "<td class='nula'></td>"; } ?> </tr> </tbody> </table> </body> </html>
Aquellos que quieran colaborar con la modificacion del codigo para su mejora, bienvenidos al tren
Un saludo
Daniel Votos: 1 - Link respuesta
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión
