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:
<?php
echo date("Y-m-d", 0);
//Salida -> 1969-12-31
?>
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í.
Ahora, para sacar una fecha aleatoria podemos simplemente llamar a la función date
y pasarle como milisegundos un número aleatorio generado con mt_rand
así:
<?php
echo date("Y-m-d", mt_rand(0, 500000000));
//Salida -> 1979-08-08, o una fecha como esas, ya que será aleatoria
?>
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.
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í:
<?php
echo strtotime("2017-09-18");
//Salida -> 1505707200
?>
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:
<?php
echo strtotime("2017-09-18 15:52:55");
//Salida -> 1505764375
?>
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
<?php
/**
* @author parzibyte
*
* @param string $formato El formato en el que deseamos que devuelva la fecha.
* por defecto es Y-m-d (2017-01-01)
*
* @param string $limiteInferior Límite inferior desde donde queremos que tome la fecha.
* Por defecto es el 1 de enero de 1970
*
* @param string $limiteSuperior Límite superior. Por defecto es el 1 de enero del 2038
*
* @return string La fecha aleatoria
*/function fecha_aleatoria($formato = "Y-m-d", $limiteInferior = "1970-01-01", $limiteSuperior = "2038-01-01"){
// Convertimos la fecha como cadena a milisegundos
$milisegundosLimiteInferior = strtotime($limiteInferior);
$milisegundosLimiteSuperior = strtotime($limiteSuperior);
// Buscamos un número aleatorio entre esas dos fechas
$milisegundosAleatorios = mt_rand($milisegundosLimiteInferior, $milisegundosLimiteSuperior);
// Regresamos la fecha con el formato especificado y los milisegundos aleatorios
return date($formato, $milisegundosAleatorios);
}
?>
Veamos algunos ejemplos de cómo podemos usar esta función.
<?php
echo fecha_aleatoria(); // Salida -> Algo como 2023-08-29
echo fecha_aleatoria("Y-m-d H-i-s"); // Salida -> Algo como 2024-03-18 18-20-48
echo fecha_aleatoria("Y-m-d", "2017", "2018"); // Salida -> Algo como 2017-09-19
echo fecha_aleatoria("Y-m-d H:i:s", "2017-09", "2017-10"); // Salida -> Algo como 2017-09-28 19:21:41
?>
Y así podemos jugar mientras el formato sea válido. Si queremos ver más opciones para formatear la fecha puedes leer este post.
El día de hoy te mostraré cómo crear un servidor HTTP (servidor web) en Android…
En este post te voy a enseñar a designar una carpeta para imprimir todos los…
En este artículo te voy a enseñar la guía para imprimir en una impresora térmica…
Hoy te voy a mostrar un ejemplo de programación para agregar un módulo de tasa…
Los usuarios del plugin para impresoras térmicas pueden contratar licencias, y en ocasiones me han…
Hoy voy a enseñarte cómo imprimir el € en una impresora térmica. Vamos a ver…
Esta web usa cookies.