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 h et 18 h) entre aujourd'hui et demain. J'ai essayé tout un tas de choses, mais aucune d'entre elles ne fonctionne donc je ne collerai aucun 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

29
Yanki Twizzy 13 juil. 2015 à 11:22

6 réponses

Meilleure réponse

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 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;
}
28
Peter Olson 13 juil. 2015 à 08:51

Essaye ça:

function getRandomDate(from, to) {
    from = from.getTime();
    to = to.getTime();
    return new Date(from + Math.random() * (to - from));
}

Lors de la création d'une date, vous pouvez également définir une heure:

var d = new Date(year, month, day, hours, minutes, seconds, milliseconds);

Si vous voulez que la date soit, par exemple, entre 8 h et 18 h, 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());
}
2
user1136881 13 juil. 2015 à 09:09

Puisque tout le monde fait du TypeScript maintenant. Voici un exemple plus moderne avec un exemple d'utilisation.

const generateRandomDOB = (): string => {
    const random = getRandomDate(new Date('1950-02-12T01:57:45.271Z'), new Date('2001-02-12T01:57:45.271Z'))
    return random.toISOString();
}

function getRandomDate(from: Date, to: Date) {
    const fromTime = from.getTime();
    const toTime = to.getTime();
    return new Date(fromTime + Math.random() * (toTime - fromTime));
}
0
Oliver Dixon 12 févr. 2020 à 01:59

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 fonctionnel.

2
Pravin 13 juil. 2015 à 09:25

Vous pouvez utiliser la capacité JS pour convertir une date en un horodatage entier

Voici un JSfiddle fonctionnel simple:

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;
}
1
benams 13 juil. 2015 à 08:42

En voici une bonne si vous voulez juste des dates simples comme: ('12 / 13/2013 ', '01, 26, 2011')

function randomDate(date1, date2){
    function randomValueBetween(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(randomValueBetween(date2,date1)).toLocaleDateString()   
    } else{
        return new Date(randomValueBetween(date1, date2)).toLocaleDateString()  

    }
}

randomDate('02/13/2013', '01/01/2000')
"1/31/2009"
randomDate()
"6/14/2001"
3
Barrard 27 oct. 2019 à 10:13