Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: erniker en 08 de Octubre 2014, 19:34
-
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:
<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!
-
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!
-
Si lo de ponerlo en español es la siguiente entrega, lo miraré despues de esta.
Vale, por ahora, tengo este código:
<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 ", ";
}
?>
</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.
-
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:
<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 ", ";
$tiempoCadaDia = $tiempoCadaDia+86400;
}
?>
</body>
</html>
Saludos
-
De acuerdo, creo que lo he pillado. Gracias!
-
como haria para cambiar los meses de forma manual? hacia el proximo o hacia el anterior?
-
Hola toni, te recomiendo abrir la consulta en un nuevo hilo. Es preferible no responder sobre hilos creados hace tiempo. Saludos.