2012-01-27 49 views
50

我有一个日期选择器,我展示两个月,我想随机选择3个日期在每个可见一个月优雅的方法来两个日期

$('.date').datepicker({ 
    minDate: new Date(), 
    dateFormat: 'DD, MM, d, yy', 
    constrainInput: true, 
    beforeShowDay: processDates, 
    numberOfMonths: 2, 
    showButtonPanel: true, 
    showOn: "button", 
    buttonImage: "images/calendar_icon.jpg", 
    buttonImageOnly: true  
    }); 

这里内生成随机日期的阵列是我的计算

var now = new Date(); 
var nowTime = parseInt(now.getTime()/1000); 
var randomDateSet = {}; 

function getRandomSet(y,m) { 
    var monthIndex = "m"+y+""+m; // m20121 for Jan 
    if (randomDateSet[monthIndex]) return randomDateSet[monthIndex]; 
    // generate here 
. 
. - I need this part 
. 
    return randomDateSet[monthIndex]; 
} 

function processDay(date) { // this is calculated for each day so we need a singleton for the array 
    var dateTime = parseInt(date.getTime()/1000); 
    if (dateTime <= (nowTime-86400)) { 
    return [false]; // earlier than today 
    } 
    var m = date.getMonth(), d = date.getDate(), y = date.getFullYear(); 
    var randomDates = getRandomSet(y,m); 

    for (i = 0; i < randomDates.length; i++) { 
    if($.inArray((m+1) + '-' + d + '-' + y,randomDates) != -1 || new Date() > date) { 
     return [true,"highlight","Some message"]; 
    } 
    } 
    return [true,"normal"]; // ordinary day 
} 

回答

158

也许我错过了一些东西,但不是这样吗?

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

randomDate(new Date(2012, 0, 1), new Date()) 
+1

也许 - 你可以做3个日期,每个月没有重叠吗? – mplungjan 2012-01-27 15:46:12

+0

By * overlaps *你的意思是生成同一日期吗?不,这个代码不处理这种情况,理论上它可以生成相同的日期(特别是当你截断时间时)。但要摆脱重复,不应该很难。 – 2012-01-27 15:50:41

+2

相关函数获取给定日期之前(或之后)天数的日期: 'function randomDateAfterDate(start,days){ return new Date(start.getTime()+(Math.random()* days * 24 * 60 * 60 * 1000)); }' – 2015-11-17 15:29:17

1

您可以将边界日期转换为整数(Date.getTime()),然后使用Math.random()在给定边界内生成随机日期。然后回到Date对象Date.setTime()

+0

x次重复无(在此,x = 3)? – mplungjan 2012-01-27 15:45:33

+0

添加一个循环和一个已经生成的日期数组,以便在生成新日期时进行检查。或者我错过了什么? – bububaba 2012-01-27 15:48:17

+0

当然 - 但优雅? – mplungjan 2012-01-27 19:35:22

2
new Date(+(new Date()) - Math.floor(Math.random()*10000000000)) 
相关问题