在javascript中生成随机日期,但从数组中排除一些日期

在javascript中生成随机日期,但从数组中排除一些日期,javascript,arrays,datetime,arraylist,random,Javascript,Arrays,Datetime,Arraylist,Random,我有一个名为dates的数组,其中包含一些日期。我想排除这些日期,并生成一个从今天开始的新随机日期 日期=[20/2/2020,10/2/2019]/需要排除日期 到目前为止我已经试过了 var new_dif = Math.random(); //generates random number var daea = new Date(new_dif); //new random date alert(daea

我有一个名为dates的数组,其中包含一些日期。我想排除这些日期,并生成一个从今天开始的新随机日期

日期=[20/2/2020,10/2/2019]/需要排除日期

到目前为止我已经试过了

        var new_dif =  Math.random(); //generates random number
        
        var daea = new Date(new_dif); //new random date
        
        alert(daea); //generates new date with year 1970

您可能希望尝试类似的方法(在一年后的将来某处设置一个随机日期)

然后,您需要检查排除的数组,看看它们是否匹配。如果没有,那么你就可以使用它

或者在使用循环时:

函数getRandomDate(){ var now=Date.now(); var newDiff=parseInt(Math.random()*1000*60*60*24*365,10); var otherDate=新日期(现在+新差异); 返回其他日期; }; 不包括风险值=['2020-02-20','2019-02-10']; var重复=真; while(复制){ var getMyDate=getRandomDate(); 重复=错误; excludedDate.forEach((excludedDate)=>{ var excludedInMs=(新日期(excludedDate)).getTime(); 如果(不包括数据项===getMyDate){ 重复=正确; } }); 如果(!重复){ log('while>>',getMyDate); } }
  • 从今天开始创建随机日期
  • 进行while循环,检查生成的已存在于排除日期数组中(继续循环,直到找到不在日期数组中的日期)
  • const randomDateFromToday=(不包括日期,最长天数=365)=>{
    常量随机日期=()=>{
    const rand=Math.floor(Math.random()*最长天数)*1000*60*60*24;
    const dat=新日期(Date.now()+rand);
    返回`${dat.getDate()}/${dat.getMonth()+1}/${dat.getFullYear()}`;
    };
    设rday=randomDate();
    而(不包括日期。某些((日期=>日期===rday)){
    rday=随机日期();
    }
    返回日;
    };
    日期=[“2020年2月20日”、“2019年2月10日”];
    console.log(randomDateFromToday(dates));
    
    console.log(randomDateFromToday(dates))如果我想建议下一个日期,该日期不是随机的,而是距数组最近的日期,该怎么办?

    选项1:创建一个循环,重试随机值,直到滚动一个非排除日期。选项2:如果我想要一个介于1和10之间的随机数,没有5和7,那么你基本上想要生成一个介于1和8之间的随机数,如果它>=5,那么向它添加1,如果它>=添加另一个1。这样一来,5是6,6是8,7是9,8是10,你可以尝试根据1970年以来随机滚动的一天,并排除一些天来调整它。@luk2302我的评论给出的结果是这样的:“Sat Aug 22 1970 22:20:58 GMT+0530(印度标准时间)”。但是我想排除数组中的其他日期,然后生成新的日期。日期构造函数将采用表示unix时间戳的整数。Math.random返回0-1之间的浮点值。有一些示例描述了如何创建最小值和最大值的随机数。如果它们匹配,您会怎么做?然后您需要在函数中设置我的示例,并重新运行它,然后重新检查新的随机日期是否再次匹配。因此,我对问题的评论选项1:循环,直到找到不冲突的日期!?你能帮我做这个环吗?我应该如何排除日期数组中的日期。非常感谢您的努力,它节省了我的时间!!直截了当且易于实现,感谢它的成功!!!在使用此函数时应该有一些注意事项。while循环意味着当数组中的元素数量接近max_days值时,它会迅速变得无效,当元素数量等于
    max_days+1
    时,它会变成一个无限循环。
    const now = (new Date()).getTime();
    const newDiff = parseInt(Math.random() * 1000 * 60 * 60 * 24 * 365, 10);
    const otherDate = new Date(now + newDiff);
    console.log(otherDate);