Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: Elanti en 16 de Septiembre 2015, 04:48

Título: Crear un calendario con PHP con date, mktime, arrays maquetar Ejercicio CU00830B
Publicado por: Elanti en 16 de Septiembre 2015, 04:48
Citar
Crea un documento HTML que conste de un título h1 con el texto <<Calendario>>. En la página deberá mostrarse el mes y año actuales (en el momento en que hagas el ejercicio) y para cada día del mes, indicar si es lunes, martes, miércoles, jueves, viernes, sábado o domingo.

Ejemplo: suponiendo que hagas el ejercicio en mayo de 2050, debería mostrarse:

Día 1: Domingo, Día 2: Lunes, Día 3: Martes, Día 4: Miércoles, … etc. hasta Día 31: Martes.

Ampliación voluntaria del ejercicio: si tienes conocimiento de maquetación con HTML y CSS te proponemos que cambies el aspecto para que en lugar de mostrarse como texto, el calendario se muestre con aspecto de calendario habitual. Para la maquetación puedes usar una tabla de 7 columnas por 7 filas (total 49 celdas) con ancho de tabla 300 píxeles y tamaño de fuente en la tabla 24 píxeles. La primera columna corresponderá a lunes y la última a domingo como mostramos en el siguiente ejemplo.

La primera parte del ejercicio era casi trivial; la segunda me planteó serias dificultades. Yo lo resolví de una manera que no sé si será la más elegante. Lo que se me ocurrió fue hacer un bucle para escribir sólo el primer día del mes en su posición correspondiente, y un segundo bucle para el resto de los días. Funcionó, aunque me aparecieron una serie de comillas en la parte superior del calendario, que no sé a qué se deben.
Agradezco si alguien me puede decir si había una manera más sencilla de resolverlo, y cómo hago para que desaparezcan las comillas.
Saludos.

Código: [Seleccionar]
<h1>Calendario</h1>
<style>
table{
    width:300px;
    font-size:24px;
}
</style>
<?php 
$mes 
date("m"); 
$año date ("Y");
$semana = array ("Mon","Tue""Wed""Thu","Fri","Sat","Sun");
echo 
"<table>";
echo 
"<thead>";
echo 
"<tr>";
echo 
"<th colspan='7'>",date("M, Y"),"</th>";
echo 
"</tr>";
echo 
"<tr>";
echo 
"<th>Lu</th>,<th>Ma</th>,<th>Mi</th>,<th>Ju</th>,<th>Vi</th>,<th>Sa</th>,<th>Do</th>,";
echo 
"</tr>";
echo 
"</thead>";
echo 
"<tbody>";
//// MARCO EL DÍA 1º DEL MES:  ////////////////////
echo "<tr>";
for (
$i=0;$i<=6;$i++){
    if (
date("D",mktime(0,0,0,$mes,1,$año))==$semana[$i]){
        echo 
"<td>"date("d"mktime(0,0,0,$mes,1,$año)) ,"</td>"
        break;
    }else{
        echo  
"<td>""</td>"  ;
    }
}


/////////marco los días subsiguientes////////////////////
for ($j=2;$j<=date("t");$j++){
    if ( 
date("D",mktime(0,0,0,$mes,$j,$año))=="Sun" )  {
        echo      
"<td>",   date("d"mktime(0,0,0,$mes,$j,$año)), "</td >""</tr>""<tr>"
    }else{
        echo      
"<td>",   date("d"mktime(0,0,0,$mes,$j,$año)) ,  "</td>" ;
    }
}

echo 
"</tbody>";
echo 
"</table>";
?>
Título: Re:CU00830B Ejercicio creación de un calendario con PHP
Publicado por: Elanti en 16 de Septiembre 2015, 18:36
Hace un rato me di cuenta de que mi código no funcionaría bien en un mes cuyo primer día fuese domingo. Aquí está mi código modificado. Espero no haberme equivocado esta vez (lo sabré el 1º de noviembre):

Código: [Seleccionar]
<h1>Calendario</h1>
<style>
table{
    width:300px;
    font-size:24px;
}
</style>
<?php 
$mes 
date("m"); 
$año date ("Y");
$semana = array ("Mon","Tue""Wed""Thu","Fri","Sat","Sun");
echo 
"<table>";
echo 
"<thead>";
echo 
"<tr>";
echo 
"<th colspan='7'>",date("M, Y"),"</th>";
echo 
"</tr>";
echo 
"<tr>";
echo 
"<th>Lu</th>,<th>Ma</th>,<th>Mi</th>,<th>Ju</th>,<th>Vi</th>,<th>Sa</th>,<th>Do</th>,";
echo 
"</tr>";
echo 
"</thead>";
echo 
"<tbody>";
//// MARCO EL DÍA 1º DEL MES:  ////////////////////
echo "<tr>";
for (
$i=0;$i<=6;$i++){
    if (
date("D",mktime(0,0,0,$mes,1,$año))==$semana[$i]){
        echo 
"<td>"date("d"mktime(0,0,0,$mes,1,$año)) ,"</td>"
            if ( 
date("D",mktime(0,0,0,$mes,1,$año))=="Sun" ){
                echo 
"</tr>","<tr>";
                break;
            }else{
                break;
            }        
    }else{
        echo  
"<td>""</td>"  ;
    }
}


/////////marco los días subsiguientes////////////////////
for ($j=2;$j<=date("t");$j++){
    if ( 
date("D",mktime(0,0,0,$mes,$j,$año))=="Sun" )  {
        echo      
"<td>",   date("d"mktime(0,0,0,$mes,$j,$año)), "</td >""</tr>""<tr>"
    }else{
        echo      
"<td>",   date("d"mktime(0,0,0,$mes,$j,$año)) ,  "</td>" ;
    }
}
echo 
"</tr>";
echo 
"</tbody>";
echo 
"</table>";
?>
Título: Re:CU00830B Ejercicio creación de un calendario con PHP
Publicado por: GonzaH en 18 de Septiembre 2015, 06:50
Hola Elanti,  el tema de las comillas lo tenes aca al problema

Código: [Seleccionar]
echo "<th>Lu</th>,<th>Ma</th>,<th>Mi</th>,<th>Ju</th>,<th>Vi</th>,<th>Sa</th>,<th>Do</th>,";
Tenes un string, y no es propio de la sintaxis table que haya coma.

Es decir vos estaria haciendo esto

Código: [Seleccionar]
<table>
   <tr>
      <th>Lunes</th>,
      <th>Martes</th>,
      <th>Miercoles</th>,
      <th>Jueves</th>,
      <th>Viernes</th>,
      <th>Sabado</th>,
   </tr>
</table>

Correctamente tendria que ser asi

Código: [Seleccionar]
<table>
   <tr>
      <th>Lunes</th>
      <th>Martes</th>
      <th>Miercoles</th>
      <th>Jueves</th>
      <th>Viernes</th>
      <th>Sabado</th>
   </tr>
</table>

De mi parte estoy tratando de resolverlo de otra manera. Pero por lo pronto encontre un error en tu código

Ej
Código: [Seleccionar]
if (date("D",mktime(0,0,0,$mes,1,$año))==$semana[$i])
Como paramentro ala función pasale esto mktime(0,0,0,10,1,2015) ahi le estariamos diciendo el mes 10 que seria octubre del 2015, fijate que te rompe la tabla.

¡Saludos!
Título: Re:CU00830B Ejercicio creación de un calendario con PHP
Publicado por: Elanti en 18 de Septiembre 2015, 12:58
Hola, GonzaH:
Te agradezco que hayas logrado resolver "el misterio de las comillas insidiosas".
En cuanto al error en el código, yo detecté que me faltaba un "break" al final del primer bucle. Ya lo solucioné, y ahora funciona para octubre y también para noviembre (que era mi gran duda). Voy a pegar todos los códigos más abajo.
Espero que ya no me moleste más este calendario, porque lo que el texto llama "ampliación voluntaria del ejercicio", en mi caso ha sido una "ampliación masoquista del ejercicio".
¡Saludos!

CALENDARIO OCTUBRE 2015:
Código: [Seleccionar]
<h1>Calendario</h1>
<style>
table{
    width:300px;
    font-size:24px;
}
</style>
<?php 
$mes 
date("m",mktime(0,0,0,10,1,2015)); 

$año date ("Y",mktime(0,0,0,10,1,2015));

$semana = array ("Mon","Tue""Wed""Thu","Fri","Sat","Sun");
echo 
"<table>";
echo 
"<thead>";
echo 
"<tr>";
echo 
"<th colspan='7'>",date("M, Y",mktime(0,0,0,10,1,2015)),"</th>";
echo 
"</tr>";
echo 
"<tr>";
echo 
"<th>Lu</th><th>Ma</th><th>Mi</th><th>Ju</th><th>Vi</th><th>Sa</th><th>Do</th>";
echo 
"</tr>";
echo 
"</thead>";
echo 
"<tbody>";
//// MARCO EL DÍA 1º DEL MES:  ////////////////////
echo "<tr>";
for (
$i=0;$i<=6;$i++){
    if (
date("D",mktime(0,0,0,10,1,2015))==$semana[$i]){
        echo 
"<td>"date("d"mktime(0,0,0,10,1,2015)) ,"</td>"
            if ( 
date("D",mktime(0,0,0,10,1,2015))=="Sun" ){
                echo 
"</tr>","<tr>";
                break;
            }else{
                break;
            }
        break;        
    }else{
        echo  
"<td>""</td>"  ;
    }
}


/////////marco los días subsiguientes////////////////////
for ($j=2;$j<=date("t",mktime(0,0,0,10,1,2015));$j++){
    if ( 
date("D",mktime(0,0,0,10,$j,2015))=="Sun" )  {
        echo      
"<td>",   date("d"mktime(0,0,0,10,$j,2015)), "</td >""</tr>""<tr>"
    }else{
        echo      
"<td>",   date("d"mktime(0,0,0,10,$j,2015)) ,  "</td>" ;
    }
}
echo 
"</tr>";
echo 
"</tbody>";
echo 
"</table>";
?>

CALENDARIO NOVIEMBRE 2015:
Código: [Seleccionar]
<h1>Calendario</h1>
<style>
table{
    width:300px;
    font-size:24px;
}
</style>
<?php 
$mes 
date("m",mktime(0,0,0,11,1,2015)); 

$año date ("Y",mktime(0,0,0,11,1,2015));

$semana = array ("Mon","Tue""Wed""Thu","Fri","Sat","Sun");
echo 
"<table>";
echo 
"<thead>";
echo 
"<tr>";
echo 
"<th colspan='7'>",date("M, Y",mktime(0,0,0,11,1,2015)),"</th>";
echo 
"</tr>";
echo 
"<tr>";
echo 
"<th>Lu</th><th>Ma</th><th>Mi</th><th>Ju</th><th>Vi</th><th>Sa</th><th>Do</th>";
echo 
"</tr>";
echo 
"</thead>";
echo 
"<tbody>";
//// MARCO EL DÍA 1º DEL MES:  ////////////////////
echo "<tr>";
for (
$i=0;$i<=6;$i++){
    if (
date("D",mktime(0,0,0,11,1,2015))==$semana[$i]){
        echo 
"<td>"date("d"mktime(0,0,0,11,1,2015)) ,"</td>"
            if ( 
date("D",mktime(0,0,0,11,1,2015))=="Sun" ){
                echo 
"</tr>","<tr>";
                break;
            }else{
                break;
            }
        break;        
    }else{
        echo  
"<td>""</td>"  ;
    }
}


/////////marco los días subsiguientes////////////////////
for ($j=2;$j<=date("t",mktime(0,0,0,11,1,2015));$j++){
    if ( 
date("D",mktime(0,0,0,11,$j,2015))=="Sun" )  {
        echo      
"<td>",   date("d"mktime(0,0,0,11,$j,2015)), "</td >""</tr>""<tr>"
    }else{
        echo      
"<td>",   date("d"mktime(0,0,0,11,$j,2015)) ,  "</td>" ;
    }
}
echo 
"</tr>";
echo 
"</tbody>";
echo 
"</table>";
?>

CALENDARIO DEL MES EN CURSO:
Código: [Seleccionar]
<h1>Calendario</h1>
<style>
table{
    width:300px;
    font-size:24px;
}
</style>
<?php 
$mes 
date("m"); 
$año date ("Y");
$semana = array ("Mon","Tue""Wed""Thu","Fri","Sat","Sun");
echo 
"<table>";
echo 
"<thead>";
echo 
"<tr>";
echo 
"<th colspan='7'>",date("M, Y"),"</th>";
echo 
"</tr>";
echo 
"<tr>";
echo 
"<th>Lu</th><th>Ma</th><th>Mi</th><th>Ju</th><th>Vi</th><th>Sa</th><th>Do</th>";
echo 
"</tr>";
echo 
"</thead>";
echo 
"<tbody>";
//// MARCO EL DÍA 1º DEL MES:  ////////////////////
echo "<tr>";
for (
$i=0;$i<=6;$i++){
    if (
date("D",mktime(0,0,0,$mes,1,$año))==$semana[$i]){
        echo 
"<td>"date("d"mktime(0,0,0,$mes,1,$año)) ,"</td>"
            if ( 
date("D",mktime(0,0,0,$mes,1,$año))=="Sun" ){
                echo 
"</tr>","<tr>";
                break;
            }else{
                break;
            }
        break;        
    }else{
        echo  
"<td>""</td>"  ;
    }
}


/////////marco los días subsiguientes////////////////////
for ($j=2;$j<=date("t");$j++){
    if ( 
date("D",mktime(0,0,0,$mes,$j,$año))=="Sun" )  {
        echo      
"<td>",   date("d"mktime(0,0,0,$mes,$j,$año)), "</td >""</tr>""<tr>"
    }else{
        echo      
"<td>",   date("d"mktime(0,0,0,$mes,$j,$año)) ,  "</td>" ;
    }
}
echo 
"</tr>";
echo 
"</tbody>";
echo 
"</table>";
?>
Título: Re:CU00830B Ejercicio creación de un calendario con PHP
Publicado por: GonzaH en 18 de Septiembre 2015, 18:45
Buenisimo Elanti, esta noche me voy a poner  bien a tratar de resolver el problema para ver si te aporto algo.

¡Saludos!
Título: Re:CU00830B Ejercicio creación de un calendario con PHP
Publicado por: GonzaH en 22 de Septiembre 2015, 05:39
Despues de renegar un poco logre encontrar este tutorial simple de como hacer un calendario con PHP [PHP]Crear Calendario (http://rubenmartin.me/2012/php-crear-un-calendario/), si no entendes algun concepto aquí estamos para ayudarte.

¡Saludos!
Título: Re:Crear un calendario con PHP con date, mktime, arrays maquetar Ejercicio CU00830B
Publicado por: Elanti en 22 de Septiembre 2015, 20:45
¡Brillante! Excelente tutorial, con explicaciones paso a paso. Utiliza recursos que me parecieron muy interesantes, como el isset() y la sintaxis alternativa para los bucles, que evita enredarse tanto con las llaves y los paréntesis.
¡Gracias!
Título: Re:Crear un calendario con PHP con date, mktime, arrays maquetar Ejercicio CU00830B
Publicado por: Elanti en 23 de Septiembre 2015, 22:51
Acabo de encontrar otro excelente tutorial, donde se utiliza una idea similar a la mía (con dos bucles), con la diferencia de que al individuo aparentemente le resultó tan fácil, que le agregó varias funcionalidades al calendario. Está todo explicado de manera muy didáctica y exhaustiva:  http:// www. desarrolloweb. com/manuales/24/