Autor Tema: Ejercicio curso PHP CU00830B funciones time(), date y cal_days_in_month  (Leído 6608 veces)

erniker

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 45
    • Ver Perfil
Vamos a ver, el enunciado es este:
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 ampliacion voluntaria, no sabria hacerlo... hace muchos años que estudie CSS y primero querria terminar este curso de introduccion a PHP, antes de ponerme de nuevo con CSS.
Del apartado obligatorio, esto es lo que tengo hasta ahora:
Código: [Seleccionar]
<html>
<head><title>Ejemplo aprenderaprogramar.com</title></head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<body>
<?php
echo '<h1> Calendario</h1>';
$time time();
echo '<h2>'date("F-Y"$time). '<h2>';
echo 'Dia 'date("j: l"$time);
?>

</body>
</html>
Lo que no se es como hacer el bucle, para que repita la instruccion echo 'Dia '. date("j: l", $time); desde el primer dia del mes hasta el ultimo, ya que el ultimo puede ser 28, 29(si el año cae en año bisiesto), 30 o 31... no se si me explico.
Por otro, lado, ¿como se cambiaria para que los nobres del dia y el mes sean en español?¿hay que asociar el valor del time a una variable?
Gracias!
« Última modificación: 11 de Octubre 2014, 10:32 por Alex Rodríguez »

javi in the sky

  • Avanzado
  • ****
  • Mensajes: 393
    • Ver Perfil
Re:Ejercicio de PHP entrega CU00830B
« Respuesta #1 en: 09 de Octubre 2014, 14:54 »
Hola, lo primero sería extraer el mes de que se trata. Sabiendo el mes, ya puedes saber cuántos días tiene (esto lo puedes hacer manualmente, con un if ... si es enero, tantos días, si es febrero, tantos días...; o bien usando una función php que lo permite como http://php.net/manual/es/function.cal-days-in-month.php).

Sobre mostrar fechas en español, está explicado en http://aprenderaprogramar.com/index.php?option=com_content&view=article&id=857:mostrar-fecha-en-espanol-php-setlocale-strftime-formato-datedefault-timezone-set-ejemplos-cu00831b&catid=70:tutorial-basico-programador-web-php-desde-cero&Itemid=193

Saludos!

erniker

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 45
    • Ver Perfil
Re:Ejercicio de PHP entrega CU00830B
« Respuesta #2 en: 09 de Octubre 2014, 19:10 »
Si lo de ponerlo en español es la siguiente entrega, lo miraré despues de esta.
Vale, por ahora, tengo este código:
Código: [Seleccionar]
<html>
<head><title>Ejemplo aprenderaprogramar.com</title></head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<body>
<?php
echo '<h1> Calendario</h1>';
$time time();
$mesDia = (int) date("m"$time);
$mes date("F"$time);
$año = (int) date("Y"$time);
$numero cal_days_in_month(CAL_GREGORIAN$mesDia$año);
echo "Hay $numero días en $mes del $año";
echo '<h2>'date("F-Y"$time). '<h2>';
                echo 
'<h4><h4>';
for ($i=1$i <= $numero$i++){
echo "Dia $i: " .date("l"$time);
echo ",&nbsp";
}
?>

</body>
</html>

El problema es que esto me da lo siguente:
 Calendario
Hay 31 días en October del 2014
October-2014
Dia 1: Thursday, Dia 2: Thursday, Dia 3: Thursday, Dia 4: Thursday, Dia 5: Thursday, Dia 6: Thursday, Dia 7: Thursday, Dia 8: Thursday, Dia 9: Thursday, Dia 10: Thursday, Dia 11: Thursday, Dia 12: Thursday, Dia 13: Thursday, Dia 14: Thursday, Dia 15: Thursday, Dia 16: Thursday, Dia 17: Thursday, Dia 18: Thursday, Dia 19: Thursday, Dia 20: Thursday, Dia 21: Thursday, Dia 22: Thursday, Dia 23: Thursday, Dia 24: Thursday, Dia 25: Thursday, Dia 26: Thursday, Dia 27: Thursday, Dia 28: Thursday, Dia 29: Thursday, Dia 30: Thursday, Dia 31: Thursday, 

Es decir, no se como hacer que salga en que dia de la semana cae cada numero.

javi in the sky

  • Avanzado
  • ****
  • Mensajes: 393
    • Ver Perfil
Re:Ejercicio de PHP entrega CU00830B
« Respuesta #3 en: 10 de Octubre 2014, 08:42 »
Tienes que tener en cuenta lo siguiente:

- time() te devuelve una marca de tiempo del día de hoy. Supongamos que hoy es día 20 del mes. Tienes que empezar a contar no por el día 20, sino por el día 1. Teniendo en cuenta que los tiempos en php trabajan en segundos y que un día son 86400 segundos, para ponernos en el día 1 tendríamos que calcular time()-19*86400, es decir, time() - (20-1)*86400

Además una vez empiezas en el bucle con el día 1, en cada pasada del bucle tienes que avanzar un día, es decir, usar una variable que en cada pasada del bucle va sumando 86400 (de esta forma vamos obteniendo día 1, día 2, día 3, etc.).

Si no cambias el valor del tiempo en el bucle obtienes siempre lo mismo: Dia 1: Thursday, Dia 2: Thursday, Dia 3: Thursday...

Con estas ideas este código sería más aproximado a lo que se pide:

Código: [Seleccionar]
<html>
<head><title>Ejemplo aprenderaprogramar.com</title></head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<body>
<?php
echo '<h1> Calendario</h1>';
$time time();  //Es para el día de hoy
$mesDia = (int) date("m"$time); 
$mes date("F"$time);
$año = (int) date("Y"$time);
$numero cal_days_in_month(CAL_GREGORIAN$mesDia$año);
echo "Hay $numero días en $mes del $año";
echo '<h2>'date("F-Y"$time). '<h2>';
                echo 
'<h4><h4>';
$diaActualDelMes = (int) date("j"$time);
$tiempoParaDia1DelMes $time - ($diaActualDelMes-1)*86400;
$tiempoCadaDia $tiempoParaDia1DelMes;
for ($i=1$i <= $numero$i++){

echo "Dia $i: " .date("l"$tiempoCadaDia);
echo ",&nbsp";
$tiempoCadaDia $tiempoCadaDia+86400;
}
?>

</body>
</html>

Saludos

erniker

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 45
    • Ver Perfil
Re:Ejercicio de PHP entrega CU00830B
« Respuesta #4 en: 10 de Octubre 2014, 19:15 »
De acuerdo, creo que lo he pillado. Gracias!

tonialves3110

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 2
    • Ver Perfil
Re:Ejercicio de PHP entrega CU00830B
« Respuesta #5 en: 12 de Abril 2016, 21:31 »
como haria para cambiar los meses de forma manual? hacia el proximo o hacia el anterior?

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Hola toni, te recomiendo abrir la consulta en un nuevo hilo. Es preferible no responder sobre hilos creados hace tiempo. Saludos.

 

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".