Generador de fechas aleatorias en Javascript

Como parte de un proyecto para la facultad, se pidió a todo el grupo realizar un único archivo .js con todas las operaciones a realizar sobre un archivo .html específico.

Las operaciones tenían que ser ejecutadas dentro de funciones separadas a ser llamadas por una acción a realizar por el usuario. ¿Se preguntarán ahora por qué estoy detallando todo esto?.

No tengo ninguna razón en particular, solo quiero que me adoren :P

Hablando en serio ahora, no podían pedir algo más fácil en la facultad #HDP. Ni cuasi destruyendo mis células cerebrales conseguí hacer funcionar esa mierda.

Buscando en google encontré esta página:

http://marc.info/?l=jmeter-user&m=122483591229912&w=2

The Mailing list ARChives (MARC) tenía guardada esta obra maestra en su base de datos. Un tal Hiro (no creo que sea el de la serie Heroes) se encontró con el mismo problema en el año 2008, y Andrey “El santo patrono de los generadores aleatorios de fechas en Javascript” Beznogov (no era su apodo pero se lo ganó en buena ley), mandó una solución de lo más simple:

1
2
3
4
var startMillis = new Date(1900,0,1).getTime(); //Get millis for January 1st 1900
var endMillis = new Date(2100,0,1).getTime(); //Get millis for January 1st 2100
var randomDate = new Date(startMillis + Math.random()*(endMillis-startMillis)); //new Date() with millis set to random value between startMillis and endMillis
randomDate.toUTCString(); //Output UTC string for randomDate

¡¡Una genialidad!! :D

A partir de acá es un agregado personal, si no te interesa no leas.

Hubiese sido excelente que fuera lo que necesitaba y no me pidieran más, pero la consigna era generar fechas aleatorias entre períodos específicos, tratando de conseguir un día de la semana en particular. Para ser más claro, tenía que generar fechas que fueran lunes entre el día en que se ejecutara la función y el 7 de diciembre (inclusive) de un año sin especificar.

Nos facilitaron un poco las cosas, sin mención del año puedo tomarlo como se me de la gana y no pueden decir Mu, porque parecerían vacas.

Aunque para no parecer demasiado vago empecé a manosear un poco el código, el producto final de esta perversión fue lo siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
var myMonth = ['Enero','Febrero','Marzo','Abril','Mayo','Junio','Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'];
var myDay = ['Domingo','Lunes','Martes','Miercoles','Jueves','Viernes','Sabado'];
var myToday = new Date(); //Día en que se ejecuta la función
var startMillis = new Date(myToday.getFullYear(),myToday.getMonth(),myToday.getDate()).getTime(); //Obtener datos del día en que se ejecuta
var endMillis = new Date(myToday.getFullYear(),11,8).getTime(); //Obtener los datos del 08/12/XXXX para poder incluir al 07/12/XXXX
var randomDate = new Date(startMillis + Math.random()*(endMillis-startMillis));
if (endMillis < startMillis) endMillis = new Date(myToday.getFullYear()+1,11,8).getTime();
while (randomDate.getDay() != 1){ //Si no es Lunes, vuelve a generar otra fecha
 
	randomDate = new Date(startMillis + Math.random()*(endMillis-startMillis));
 
}
var endDate = myDay[randomDate.getDay()]+' '+randomDate.getDate()+' de '+myMonth[randomDate.getMonth()]+' de '+randomDate.getFullYear();

Con lo que terminamos con la variable endDate que contiene la fecha generada al azar con la particularidad requerida para el proyecto.

Tags:

Comments are closed.