Nueva pregunta

Pregunta:

Fecha: 02-10-2015 11:27:41 (En Español)

CALENDARIO[No resuelta]

Gente de PHP
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:

   
	                <?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; ?>">&lt;&lt;</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; ?>">&gt;&gt;</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; ?>">&lt;&lt;</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; ?>">&gt;&gt;</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
Etiquetas: CSS - HTML - PHP - Pregunta - Script PHP 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; ?>">&lt;&lt;</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; ?>">&gt;&gt;</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; ?>">&lt;&lt;</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; ?>">&gt;&gt;</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
 
frjcbbae garagebible.com