:::: MENÚ ::::

PHP: Cómo crear un calendario en formato americano

Hace nada me he encontrado con un comentario en una de mis entradas titulada [PHP] Crear un calendario, con el siguiente mensaje:

hola, el codigo es excelente y me sirvio de mucho, pero te hago una consulta, como puedo hacer para crear el mismo calendario pero en inglés, donde el primer dia es el domungo, en lugar de lunes?
muchas gracias

— Ariel Talad

La cuestión es que el calendario americano (muy suyos), empieza la semana por Domingo en vez de Lunes. Así que vamos a hacer un par de cambios al calendario anterior para adaptarlo a esta nueva condición.

En nuestro calendario original usábamos date( 'N' ) para preguntar que día de la semana es, por ejemplo, el 12 de Junio de 2013, él nos devolvía que era 3. Partiendo de que Lunes es 1 y Domingo 7, entonces el 3 es Miércoles.

Ese número lo utilizábamos para después poder ubicar correctamente la fecha 12 en la casilla del Miércoles.

Entonces como ponemos el Domingo antes del Lunes, sencillo, si Lunes es 1, que número es menor… el 0. Si miramos en la página de date() veremos que tenemos el parámetro w (minúscula), que usa 0 para el Domingo y 6 para el Sábado.

$day_week = date('w', strtotime(date('Y-m').'-'.$i));

El siguiente paso es cambiar la distribución de las semanas, ya que originalmente cada vez que llegaba a 7 (Domingo/Europeo) creábamos una semana nueva, ahora es a 6 (Sábado/Americano).

if ($day_week == 6) { $week++; };

Ahora lo que tenemos que hacer es cambiar en la tabla de nuestro calendario la ubicación de Domingo para que aparezca antes que Lunes.

<td>Domingo</td>
<td>Lunes</td>
<td>Martes</td>   
<td>Miércoles</td>   
<td>Jueves</td>   
<td>Viernes</td>   
<td>Sábado</td>

Y ya por último nos queda modificar el for que nos sirve para construir la semana. Tan solo cambiaremos los números a uno menor, $i=1 a $i=0 y $i<=7 a $i<=6. Con la primera declaración conseguiremos que empiece la semana por cero (Domingo/Americano), y la segunda declaración para que termine dicha semana en el 6 (Sábado/Americano).

<?php for ($i=0;$i<=6;$i++) : ?>

Hemos terminado y tenemos nuestro calendario en formato Americano, empezando la semana por Domingo y terminando en Sábado.

Calendar American PHP/HTML5

Share on Facebook0Tweet about this on TwitterShare on Google+0Share on LinkedIn2Share on Tumblr0Pin on Pinterest0Email this to someone

  • Quique

    No sera más fácil cambiar la primer linea de codigo

    setlocale( LC_TIME, ‘spanish’ );

    y mover los titulos empezando por DOM ????

    • La verdad que no había barajeado la idea del setlocale(), supongo que sería porque originalmente en el artículo no viene. Lo chequearé cuando tenga tiempo para ver si es más fácil así.