web-dev-qa-db-fra.com

Générer des dates aléatoires entre deux dates et heures en Javascript

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

15
Yanki Twizzy

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;
}
22
Peter Olson

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());
}
1
user1136881

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.

1
Pravin

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"
1
Barrard

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;
}
0
benams