Je veux générer une date aléatoire entre deux dates et entre deux fois en javascript. Par exemple, je veux générer une date aléatoire (entre 8 heures et 18 heures) entre aujourd'hui et demain. J'ai essayé beaucoup de choses, mais aucune d'entre elles ne fonctionne, je ne vais donc pas coller de code car cela ne fonctionne pas. Est-ce que quelqu'un a fait quelque chose de similaire
function generateRandomDate(start, end) {
return new Date(start + Math.random() * (end - start));
}
Le code que j'utilise pour générer des dates aléatoires est affiché ci-dessus
Je pense que je comprends ce que vous recherchez. Cela renverra une date aléatoire entre start
et end
, avec une heure aléatoire entre startHour
et endHour
(qui doivent être des valeurs comprises dans la plage 0-23
).
function randomDate(start, end, startHour, endHour) {
var date = new Date(+start + Math.random() * (end - start));
var hour = startHour + Math.random() * (endHour - startHour) | 0;
date.setHours(hour);
return date;
}
Essaye ça:
function getRandomDate(from, to) {
from = from.getTime();
to = to.getTime();
return new Date(from + Math.random() * (to - from));
}
Lorsque vous créez une date, vous pouvez également définir une heure:
var d = new Date(year, month, day, hours, minutes, seconds, milliseconds);
Si vous souhaitez que la date soit, par exemple, entre 8 heures et 18 heures, définissez simplement une heure aléatoire après avoir obtenu une date aléatoire.
Donc, dans ce cas, la fonction ressemblerait à ceci:
function getRandomDate(fromDate, toDate, fromTime, toTime) {
fromDate = fromDate.getTime();
toDate = toDate.getTime();
fromTime.setFullYear(1970,0,1); //reset the date
toTime.setFullYear(1970,0,1); //because we only want a time here
fromTime = fromTime.getTime();
toTime = toTime.getTime();
randomDate = new Date(fromDate + Math.random() * (toDate - fromDate));
randomTime = new Date(fromTime + Math.random() * (toTime - fromTime));
randomDate.setHours(randomTime.getHours());
randomDate.setMinutes(randomTime.getMinutes());
randomDate.setSeconds(randomTime.getSeconds());
}
essaye ça:
var yourRandomGenerator=function(rangeOfDays,startHour,hourRange){
var today = new Date(Date.now());
return new Date(today.getYear()+1900,today.getMonth(), today.getDate()+Math.random() *rangeOfDays, Math.random()*hourRange + startHour, Math.random()*60)
}
console.log(yourRandomGenerator(2,8,2));
ici est un violon qui travaille.
En voici une bonne si vous voulez juste des dates simples telles que: ('12/13/2013 ', '01, 26, 2011')
function randomDate(date1, date2){
function getRandomArbitrary(min, max) {
return Math.random() * (max - min) + min;
}
var date1 = date1 || '01-01-1970'
var date2 = date2 || new Date().toLocaleDateString()
date1 = new Date(date1).getTime()
date2 = new Date(date2).getTime()
if( date1>date2){
return new Date(getRandomArbitrary(date2,date1)).toLocaleDateString()
} else{
return new Date(getRandomArbitrary(date1, date2)).toLocaleDateString()
}
}
randomDate('02/13/2013', '01/01/2000')
"1/31/2009"
randomDate()
"6/14/2001"
Vous pouvez utiliser la capacité JS pour convertir une date en un horodatage entier
Voici un travail simple JSfiddle :
function randomTime(start, end) {
var diff = end.getTime() - start.getTime();
var new_diff = diff * Math.random();
var date = new Date(start.getTime() + new_diff);
return date;
}