Hoy en la mañana estuve platicando con un compañero sobre un algoritmo para hacer un ciclo while con PHP que fuera desde una fecha hasta otra, día a día. Por ejemplo, un ciclo que fuera desde el 18 de marzo hasta el 25 de marzo y en cada iteración se pudiera obtener el día.
Gracias a las funciones de strtotime
y date
fue una tarea fácil, y hoy vengo a explicar cómo es por si a alguien más le sirve.
Primero debemos tener el tiempo en segundos de la fecha. Por ejemplo, la fecha del 18 de enero del 2019 representada como los segundos que han pasado desde la fecha Unix es de 1552867200
segundos.
Para convertir una fecha en forma de cadena a su representación como segundos usamos strtotime
que devuelve los segundos y recibe una cadena que es una fecha.
En este caso queremos que el “step” del ciclo sea de un día. Un día representado como segundos equivale a 86400 (24
horas * 60
minutos por hora * 60
segundos por minuto), por lo tanto hay que ir aumentando este número en cada iteración.
El ciclo se terminará cuando el tiempo inicio alcance o supere al tiempo de fin, aumentando de día a día.
Hablar es de mal gusto así que veamos el código. Es un ciclo while que aumenta en un día, se rompe cuando $tiempoInicio
alcanza a $tiempoFin
.
Dentro del ciclo obtenemos la fecha legible y la formateamos con la función date.
Usamos printf como alternativa a echo, lo explico únicamente por si genera confusiones. La salida es la siguiente:
Tal vez se piense que se puede solucionar con un simple ciclo, pero no es así. Tendrías que lidiar con más cosas como saber el fin de mes, los años bisiestos (para lo del mes de febrero), los días totales de un mes, incrementar el año, etcétera.
Si cambiamos el rango a uno más largo, por ejemplo, que haya un mes de diferencia, la salida es esta:
No tuvimos que modificar ningún otro valor, solamente las fechas. Esta es la ventaja de trabajar con las fechas como se debe en lugar de crear algoritmos complejos.
Ahora que ya hicimos esto podemos jugar un poco más.
Hagamos esto un poco más divertido, haciendo que el ciclo avance una hora a la vez. Hay que modificar el incremento y formatear la fecha de distinta manera, nada complejo:
El algoritmo en general no cambió, simplemente cambia el formato y el step. La salida es la siguiente:
Ya no pondré el código, pues con los ejemplos de arriba se entiende. Pero con este enfoque podemos hacer un ciclo que avance minuto a minuto o segundo a segundo. También podríamos hacer que avance cada 15 minutos.
Para terminar el post te invito a probar los ejercicios en línea:
Recuerda que puedes descargar el código y ejecutarlo en la web o con la terminal; incluso puedes hacerlo en Android.
Te invito a ver más sobre PHP o algoritmos con fechas en mi blog.
La impresión de un PDF en cualquier impresora se puede automatizar con un bot de…
Hoy te enseñaré cómo enviar un mensaje a un usuario desde un bot de Telegram…
El día de hoy te enseñaré algo muy sencillo pero útil al programar con PHP:…
El plugin para imprimir en impresoras térmicas alcanza hoy su versión 3.4.0 agregando soporte para…
En ocasiones es necesario leer los pixeles y colores de una imagen con JavaScript del…
Siguiendo con los tutoriales de listas desplegables o select con JavaScript, vamos a ver cómo…
Esta web usa cookies.