दो तिथियों के भीतर यादृच्छिक तिथियों की सरणी उत्पन्न करने की सुरुचिपूर्ण विधि


88

मेरे पास एक तारीख है जहां मैं दो महीने दिखाता हूं और मैं प्रत्येक दृश्य महीने में 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
}

जवाबों:


254

शायद मुझे कुछ याद आ रहा है, लेकिन क्या यह नहीं है?

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 तारीखों के लिए ऐसा कर सकते हैं?
मपलुंगजन

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

2
दी गई तारीख से पहले (या बाद में) कई दिनों से एक तारीख पाने के लिए संबंधित कार्य: function randomDateAfterDate(start, days) { return new Date(start.getTime() + (Math.random()*days*24*60*60*1000)); }
शरद ऋतु लियोनार्ड


6

"03/02/1975" जैसे स्ट्रिंग मान प्राप्त करने के लिए Moment.js && @Demven Weir के उत्तर का उपयोग करना ।

moment(new Date(+(new Date()) - Math.floor(Math.random()*10000000000)))
.format('MM/DD/YYYY');

नोट: उत्पादित वर्षों की अवधि बढ़ाने के लिए एक समय में एक शून्य जोड़ते रहें।


1

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


दोहराने के बिना x बार (यहाँ x = 3)?
मपलुंगजन

लूप जोड़ने का एक मामला और नई जनरेट करते समय पहले से तैयार की गई तारीखों की एक सरणी को जांचने के लिए। या क्या मैं कुछ न कुछ भूल रहा हूं?
बुबुबाबा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.