2012-01-27 14 views
50

मैं एक datepicker है जहाँ मैं दो महीने दिखाने के है और मैं बेतरतीब ढंग से प्रत्येक दिखाई महीनेसुरुचिपूर्ण विधि दो तिथियों

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

यहाँ में 3 दिनांकों का चयन करना चाहते भीतर यादृच्छिक तिथियों की सरणी उत्पन्न करने के लिए मेरी गणना है

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

+0

* ओवरलैप * क्या आपका मतलब एक ही तारीख उत्पन्न करना है? नहीं, यह कोड ** नहीं ** ** इस मामले को संभालता है, सैद्धांतिक रूप से यह उसी तारीख को उत्पन्न कर सकता है (विशेष रूप से जब आप समय कम करते हैं)। लेकिन डुप्लिकेट से छुटकारा पाने में मुश्किल नहीं होनी चाहिए। –

+2

किसी तारीख को प्राप्त करने के लिए (या उसके बाद) दिनांक प्राप्त करने के लिए संबंधित फ़ंक्शन: 'फ़ंक्शन यादृच्छिकडेटाफर्टडेट (प्रारंभ, दिन) { नई तिथि (start.getTime() + (Math.random() * दिन * 24 * 60 * 60 * 1000)); } ' –

1

आप सीमा तिथियों को पूर्णांक (Date.getTime()) में परिवर्तित कर सकते हैं और फिर दिए गए सीमाओं के भीतर अपनी यादृच्छिक तिथियां उत्पन्न करने के लिए Math.random() का उपयोग कर सकते हैं। फिर Date.setTime() के साथ Date ऑब्जेक्ट पर वापस जाएं।

+0

एक्स बार दोहराने (यहाँ एक्स = 3) के बिना? – mplungjan

+0

एक लूप जोड़ने और पहले से जेनरेट की गई तारीखों की एक सरणी जोड़ने का मामला नया उत्पन्न करते समय जांचने के लिए। या क्या मैं कुछ न कुछ भूल रहा हूं? – bububaba

+0

ज़रूर - लेकिन सुंदरता से? – mplungjan

2
new Date(+(new Date()) - Math.floor(Math.random()*10000000000)) 

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^