দুটি তারিখের মধ্যে এলোমেলো তারিখের অ্যারে উত্পন্ন করার জন্য মার্জিত পদ্ধতি


89

আমার একটি ডেটপিকার রয়েছে যেখানে আমি দুই মাস প্রদর্শন করি এবং আমি এলোমেলোভাবে প্রতিটি দৃশ্যমান মাসে 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
}

উত্তর:


259

আমি কিছু মিস করছি, তবে এটি কি তাই না?

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

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

4
সম্ভবত - আপনি কি প্রতি মাসে ওভারল্যাপ ছাড়াই 3 তারিখের জন্য এটি করতে পারেন?
এমপ্লুঞ্জন

4
দ্বারা ওভারল্যাপ আপনি একই তারিখ উৎপাদিত বোঝাতে চেয়েছেন? না, এই কোডটি এই কেসটি পরিচালনা করে না , তাত্ত্বিকভাবে এটি একই তারিখটি তৈরি করতে পারে (বিশেষত যখন আপনি সময় কেটে ফেলেন)। তবে সদৃশগুলি থেকে মুক্তি পাওয়া শক্ত হওয়া উচিত নয়।
টমাসজ নুরকিউইচজ

4
প্রদত্ত তারিখের বেশ কয়েকদিন আগে (বা পরে) তারিখ পাওয়ার জন্য সম্পর্কিত ফাংশন: function randomDateAfterDate(start, days) { return new Date(start.getTime() + (Math.random()*days*24*60*60*1000)); }
শরত্কাল লিওনার্ড


6

"03/02/1975" এর মতো স্ট্রিংয়ের মান পেতে মোমেন্ট.জেএস && ডেমভেন ওয়েয়ারের উত্তর ব্যবহার করা ।

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)?
এমপিপ্লুজন ২

একটি নতুন তৈরি করার সময় তার বিরুদ্ধে পরীক্ষা করার জন্য একটি লুপ এবং ইতিমধ্যে উত্পন্ন তারিখগুলির একটি অ্যারে যুক্ত করার বিষয়টি। নাকি আমি কিছু মিস করছি?
বুবুবাবা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.