我想在javascript中生成两个日期和两个时间之间的随机日期。例如,我想在今天和明天之间(上午8点至下午6点之间)生成一个随机日期。我尝试了很多方法,但都不起作用,所以我不会粘贴任何代码。有人做过类似的事情吗?
function generateRandomDate(start, end) {
return new Date(start + Math.random() * (end - start));
}
我用于生成随机日期的代码已发布如上所示。
我想在javascript中生成两个日期和两个时间之间的随机日期。例如,我想在今天和明天之间(上午8点至下午6点之间)生成一个随机日期。我尝试了很多方法,但都不起作用,所以我不会粘贴任何代码。有人做过类似的事情吗?
function generateRandomDate(start, end) {
return new Date(start + Math.random() * (end - start));
}
我用于生成随机日期的代码已发布如上所示。
我觉得我理解你的意思了。这将返回一个随机日期,其日期在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;
}
自从现在每个人都在使用TypeScript,这是一个更现代的示例,其中包含如何使用它的示例。
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));
}
如果你只需要像这样的简单日期:('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"
试试这个:
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);
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());
}
试一下这个:
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));
getMonth
是基于0的,所以你需要加1。 - Stephen Saucier你可以使用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;
}
+end
和 +start
代替 end.getTime()
和 start.getTime()
,这允许您传递数字以及日期。 - Peter Olsonfunction getRamdomDateInBetween(start, end) {
start = Date.parse(start);
end = Date.parse(end);
return new Date(Math.floor(Math.random() * (end - start + 1) + start));
}
console.log(getRamdomDateInBetween('2021-01-01', '2021-01-30'));
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();
}