Подтвердить что ты не робот

Создание случайной даты между двумя датами и временем в Javascript

Я хочу создать случайную дату между двумя датами и два раза в javascript. Например, я хочу создать случайную дату (между 8:00 и 18:00) между сегодняшним днем ​​и завтра. Я пробовал целую кучу вещей, но никто из них не работает, поэтому я не буду вставлять какой-либо код, так как он не работает. Кто-нибудь сделал что-то подобное

function generateRandomDate(start, end) { 
    return new Date(start + Math.random() * (end - start)); 
}

Код, который я использую для генерации случайных дат, размещен выше

4b9b3361

Ответ 1

Думаю, я понимаю, что тебе нужно. Это вернет случайную дату между start и end со случайным часом между startHour и endHour (которые должны быть значениями в диапазоне 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;
}

Ответ 2

Попробуйте следующее:

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

При создании даты вы также можете установить время:

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

Если вы хотите, чтобы дата была, например, с 8:00 до 18:00, просто установите случайное время после получения случайной даты.

Итак, в этом случае функция будет выглядеть так:

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

Ответ 3

попробуйте следующее:

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));

здесь рабочая сцена.

Ответ 4

Вот хороший, если вы просто хотите простые даты, такие как: ('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"

Ответ 5

Вы можете использовать JS-способность для преобразования даты в целую временную метку

Вот простой рабочий 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;
}