在Javascript中生成两个日期和时间之间的随机日期

在Javascript中生成两个日期和时间之间的随机日期,javascript,date,Javascript,Date,我想在javascript中生成两个日期之间和两次之间的随机日期。例如,我想在今天和明天之间生成一个随机日期(上午8点到下午6点)。我已经尝试了很多方法,但都不起作用,所以我不会粘贴任何代码,因为它不起作用。有人做过类似的事情吗 function generateRandomDate(start, end) { return new Date(start + Math.random() * (end - start)); } 我用于生成随机日期的代码发布在上面请尝试以下操作: fu

我想在javascript中生成两个日期之间和两次之间的随机日期。例如,我想在今天和明天之间生成一个随机日期(上午8点到下午6点)。我已经尝试了很多方法,但都不起作用,所以我不会粘贴任何代码,因为它不起作用。有人做过类似的事情吗

function generateRandomDate(start, end) { 
    return new Date(start + Math.random() * (end - start)); 
}
我用于生成随机日期的代码发布在上面

请尝试以下操作:

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点到下午6点之间,只需在获得随机日期后设置一个随机时间

在这种情况下,函数如下所示:

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

您可以使用JS功能将日期转换为整数时间戳

以下是一个简单的工作流程:


我想我明白你的意思。这将返回一个介于
开始
结束
之间的随机日期,以及介于
开始时间
结束时间
之间的随机小时(其值应在
0-23
范围内)

试试这个:

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

如果你只想要简单的日期,比如:('12/13/2013','01/26/2011'),这里有一个很好的例子


因为现在每个人都在做打字。这里有一个更现代的例子,以及如何使用它的例子

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));
}
单一功能

    function (line) {
   return  new Date(new Date('2019-02-12T01:57:45.271Z').getTime() + Math.random() * (new Date('2020-02-12T01:57:45.271Z').getTime() - new Date('2019-02-12T01:57:45.271Z').getTime())).toISOString(); 
} 

您仍然应该发布不起作用的代码,这样我们就可以从某个地方开始了。看起来您只需要这样做。你已经试过了吗?试一下这个:你所拥有的理论上应该有用。“你能解释一下为什么不对吗?”费利克斯克林你的建议听起来很有趣,但我想要一些通用的东西,我可以用。想象一下,如果我在今天和明年的这个时候之间生成一个随机日期,那么使用您的方法将不容易。您的解决方案和我的代码之间没有区别。我想生成介于特定时间之间的随机日期,而不仅仅是任何时间。@YankiTwizzy我不明白,他的函数返回的是介于
from
to
之间的随机
日期,这不是你想要的吗?@YankiTwizzy我更新了答案,您可以指定创建日期的时间。@user1136881您的解决方案是在两个日期之间生成随机日期,而不是在两个日期和两个时间之间生成随机日期(这是我想要的)@YankiTwizzy如果您希望日期在上午8点到下午6点之间,在获得随机日期后,只需设置一个随机时间。您也可以使用
+end
+start
而不是
end.getTime()
start.getTime()
,它允许您输入数字和
日期。@benams您的解决方案和我的代码没有区别。我希望生成介于特定时间之间的随机日期,而不仅仅是任何时间。请访问我附加的JSFIDLE链接。您可以找到两个特定日期。
getMonth
是基于0的,因此您需要向其中添加1。开始和结束应该是什么?我尝试传递随机整数,它总是返回1969年12月31日星期三,但每次我更改开始和结束时返回的时间不同。键入Javascript日期-例如,
randodate(新日期(2020,0,1),new Date(),0,24)
很抱歉,我知道这是一个非常晚的响应,但最近我创建了这个库@fars20/random sources来实现这一点
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"
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));
}
    function (line) {
   return  new Date(new Date('2019-02-12T01:57:45.271Z').getTime() + Math.random() * (new Date('2020-02-12T01:57:45.271Z').getTime() - new Date('2019-02-12T01:57:45.271Z').getTime())).toISOString(); 
}