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


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.