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:

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í:

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í:

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:

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

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

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.

Dejar un comentario