fechas

Generar fechas aleatorias en un rango usando PHP y mt_rand

Tal vez en alguna ocasión tengamos que generar fechas aleatorias en PHP. En este post explicaré resumidamente cómo podemos hacerlo.

PHP tiene la función date que toma como primer argumento el formato (por ejemplo Y-m-d nos daría algo como 2017-01-25) y como segundo (opcional) el número de milisegundos de los que queremos que nos devuelva la fecha.

Es decir, como segundo parámetro podemos poner los milisegundos transcurridos desde el 1 de enero de 1970 para formatearlos como cadena. Para entender mejor, veamos este ejemplo:

See the gist on github.

Como en este caso le pasamos un 0 como argumento, nos devolvió la fecha del 31 de diciembre de 1969.

Se supone que debería devolver la fecha del 1 de enero de 1970, ¿no? pues sí, pero como el tiempo unix está basado en UTC, y nosotros no estamos en la misma zona horaria a veces nos devolverá diferentes resultados. Más información aquí

Entonces, si le ponemos 1000 milisegundos nos dará la fecha del 1 de enero mas un segundo, si le ponemos 3,600,000 ( 1000 * 60 * 60) nos dará la fecha del 1 de enero mas una hora, y así.

Fecha aleatoria con PHP

Ahora, para sacar una fecha aleatoria podemos simplemente llamar a la función datey pasarle como milisegundos un número aleatorio generado con mt_randasí:

See the gist on github.

Llamamos a date con el mismo formato, pero en lugar de un número definido por nosotros, dejamos que mt_rand se encargue.

mt_rand recibe un mínimo y un máximo, y nos devuelve un número que se encuentre entre esos límites.

Fecha aleatoria en rango con PHP

De esa forma podemos generar una fecha aleatoria.

Ahora, ¿qué pasa si queremos generar una fecha aleatoria entre dos fechas? es decir, llamar a la función y decirle “quiero que me des una fecha aleatoria entre el 1 de septiembre del 2017 y el 15 de septiembre del 2018”

Aquí entra otra función, strtotime que convierte una cadena a milisegundos. Es decir, la llamamos así:

See the gist on github.

Y dependiendo de la fecha que le pasemos como string, nos dará el número de milisegundos. Obviamente podemos especificar más formatos. Veamos el siguiente ejemplo:

See the gist on github.

Aquí le pasamos una fecha junto con la hora. Y nos devuelve el número de milisegundos exactos.

Entonces si combinamos todas estas funciones, al final podremos crear una función que devuelva una fecha aleatoria entre dos fechas que el usuario defina. Vamos a crearla

See the gist on github.

Veamos algunos ejemplos de cómo podemos usar esta función.

See the gist on github.

Y así podemos jugar mientras el formato sea válido. Si queremos ver más opciones para formatear la fecha puedes leer este post.

Encantado de ayudarte


Estoy disponible para trabajar en tu proyecto, modificar el programa del post o realizar tu tarea pendiente, no dudes en ponerte en contacto conmigo.

No te pierdas ninguno de mis posts

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Solución: Unable to extract uploader id con youtube-dl

En mi blog te he enseñado a usar youtube-dl para descargar vídeos con permiso del…

4 días hace

Enviar foto a Telegram usando cURL y Bot

Siguiendo con los tutoriales que consumen la API de los Bots de Telegram con cURL…

4 días hace

cURL y Telegram: enviar mensaje a Bot

En un post previo te enseñé a enviar un mensaje en nombre de un Bot…

4 días hace

Impresora térmica con Telegram usando Bot

En este artículo te voy a mostrar una guía para imprimir en una impresora térmica…

4 días hace

Imprimir PDF con Bot de Telegram

La impresión de un PDF en cualquier impresora se puede automatizar con un bot de…

1 semana hace

Enviar mensaje con bot de Telegram usando JavaScript (lado del cliente)

Hoy te enseñaré cómo enviar un mensaje a un usuario desde un bot de Telegram…

1 semana hace

Esta web usa cookies.