Autor Tema: Crear un calendario con PHP con date, mktime, arrays maquetar Ejercicio CU00830B  (Leído 11597 veces)

Elanti

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 30
    • Ver Perfil
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>";
?>
« Última modificación: 21 de Septiembre 2015, 11:38 por César Krall »

Elanti

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 30
    • Ver Perfil
Re:CU00830B Ejercicio creación de un calendario con PHP
« Respuesta #1 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>";
?>

GonzaH

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 30
  • SMFPersonal
    • Ver Perfil
    • SMFPersonal
Re:CU00830B Ejercicio creación de un calendario con PHP
« Respuesta #2 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!

Elanti

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 30
    • Ver Perfil
Re:CU00830B Ejercicio creación de un calendario con PHP
« Respuesta #3 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>";
?>

GonzaH

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 30
  • SMFPersonal
    • Ver Perfil
    • SMFPersonal
Re:CU00830B Ejercicio creación de un calendario con PHP
« Respuesta #4 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!

GonzaH

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 30
  • SMFPersonal
    • Ver Perfil
    • SMFPersonal
Re:CU00830B Ejercicio creación de un calendario con PHP
« Respuesta #5 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, si no entendes algun concepto aquí estamos para ayudarte.

¡Saludos!
« Última modificación: 22 de Septiembre 2015, 05:42 por GonzaH »

Elanti

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 30
    • Ver Perfil
¡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!

Elanti

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 30
    • Ver Perfil
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/
« Última modificación: 24 de Septiembre 2015, 10:59 por César Krall »

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".