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


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.