একটি অ্যারেতে সর্বনিম্ন / সর্বোচ্চ তারিখগুলি?


106

আমি কীভাবে তারিখের অ্যারে থেকে সর্বনিম্ন এবং সর্বোচ্চ তারিখটি জানতে পারি? বর্তমানে, আমি এটির মতো একটি অ্যারে তৈরি করছি:

var dates = [];
dates.push(new Date("2011/06/25"))
dates.push(new Date("2011/06/26"))
dates.push(new Date("2011/06/27"))
dates.push(new Date("2011/06/28"))

এটি করার জন্য কি কোনও অন্তর্নির্মিত ফাংশন আছে বা আমি নিজেই লিখতে চাই?

উত্তর:


137

আইই, এফএফ, ক্রোমের সাথে কোড পরীক্ষা করা হয় এবং সঠিকভাবে কাজ করে:

var dates=[];
dates.push(new Date("2011/06/25"))
dates.push(new Date("2011/06/26"))
dates.push(new Date("2011/06/27"))
dates.push(new Date("2011/06/28"))
var maxDate=new Date(Math.max.apply(null,dates));
var minDate=new Date(Math.min.apply(null,dates));

1
সংখ্যার রূপান্তরকরণ '2011/06/25' স্ট্রিংয়ের জন্য নয়, তবে নতুন তারিখের জন্য প্রয়োগ হয়েছে ('2011/06/25')। সংখ্যা (নতুন তারিখ ('2011/06/25')) === 1308949200000। কোডটি ক্রোম, আইই, এফএফ
অ্যান্ড্রু ডি

@ রবজি - "স্ট্রিং ডেটস" বলতে কী বোঝ?
অ্যান্ড্রু ডি

যেমন dates.push('2011/06/05')। স্ট্রিংগুলি ব্যবহার করে অ্যারেটি সহজেই বাছাই করা যায় এবং প্রথম এবং শেষ সদস্যের মানগুলি ফেরত আসে এবং প্রয়োজনে তারিখে রূপান্তরিত হয়।
রবজি

10
@ রবজি - উপরের প্রশ্নে অ্যারেটিতে তারিখ অবজেক্ট রয়েছে, "তারিখের স্ট্রিং" নয় - তারিখের বস্তুগুলির জন্য প্রতিক্রিয়াও। কিছু ক্ষেত্রে "ডেট স্ট্রিংস" ব্যবহার করা খুব খারাপ অভ্যাস। পরবর্তী দুটি তারিখের স্ট্রিংয়ের তুলনা করুন: "2011/06/05" এবং "2011/06/05 00:00:00"। 1) স্ট্রিং হিসাবে: ("2011/06/05" === "2011/06/05 00:00:00"): ফলাফল মিথ্যা; 2) তারিখের অবজেক্টস হিসাবে (সংখ্যায় রূপান্তর সহ): সংখ্যা (নতুন তারিখ ("2011/06/05")) === সংখ্যা (নতুন তারিখ ("2011/06/05 00:00:00")): ফলাফল সত্য - একটি সঠিক ফলাফল!
অ্যান্ড্রু ডি

@AndrewD। যদি ডেটস্ট্রিংগুলি সামঞ্জস্যপূর্ণ থাকে, বলুন YYYY/MM/DD HH:MM:SSএবং এর সাথে অনেকগুলি স্ট্রিং জড়িত রয়েছে, আপনি কি স্ট্রিং তুলনা বা Number(new Date(dateString))তুলনা করার পরামর্শ দিবেন ?
ব্ল্যাকপ্যাথার

83

কিছুটা এইরকম:

var min = dates.reduce(function (a, b) { return a < b ? a : b; }); 
var max = dates.reduce(function (a, b) { return a > b ? a : b; });

Chrome 15.0.854.0 দেব পরীক্ষা করা হয়েছে


Array.reduce()আইই 9 এর আগে আই-তে উপলব্ধ নয়। দুর্দান্ত ধারণা যদিও।
jfriend00

1
অ্যারে.রেডস () জাভাস্ক্রিপ্ট সমতুল্য ফাংশন
অ্যান্ড্রু ডি

ঠিক, এটা সম্পর্কে পড়তে বলিয়ে জাভাস্ক্রিপ্ট :function foreach(func, array) { for(var i = 0; i != array.length; ++i) { func(array[i]); } } function reduce(combine, base, array) { foreach(function(element) { base = combine(base, element); }, array); return base; }
অকস্মাৎ জ্বলিয়া ত্তঠা

1
আইই <9 মারা যেতে পারে, এবং প্রকৃতপক্ষে, এপ্রিল 2013 পর্যন্ত এটি এখন বিশ্বব্যাপী ব্রাউজার ব্যবহারের 9.3% হিসাবে রয়েছে
wprl

3
হ্রাস সমাধান স্ট্রিংয়ের জন্য এবং তারিখগুলি অবজেক্টগুলির জন্য কাজ করে।
বেনোইট

33

_.minএবং _.maxখেজুর অ্যারে উপর কাজ; আপনি যদি লোড্যাশ বা অ্যান্ডস্কোর ব্যবহার করছেন তবে তাদের ব্যবহার করুন এবং আপনি ইতিমধ্যে না থাকলে লোড্যাশ (যা এর মতো অনেকগুলি ইউটিলিটি ফাংশন সরবরাহ করে) ব্যবহার করার বিষয়টি বিবেচনা করুন।

উদাহরণ স্বরূপ,

_.min([
    new Date('2015-05-08T00:07:19Z'),
    new Date('2015-04-08T00:07:19Z'),
    new Date('2015-06-08T00:07:19Z')
])

অ্যারেতে দ্বিতীয় তারিখটি ফিরে আসবে (কারণ এটি প্রথম দিকের)।


3
ওপির প্রশ্নের সরাসরি উত্তর দেয় না। ওপি জিজ্ঞাসা করছে যে কোনও অন্তর্নির্মিত পদ্ধতিটি জাভাস্ক্রিপ্টে পাওয়া যায় কিনা। সুতরাং, যদিও _.মিন এবং _.ম্যাক্স ন্যূনতম বা সর্বাধিক তারিখগুলি সন্ধান করতে ব্যবহৃত হতে পারে তবে ওপি যা খুঁজছে তা নয়। এছাড়াও, একটি ইউটিলিটি লাইব্রেরি বিবেচনা একটি মতামতযুক্ত বিষয়।
detj

13
আমি শ্রদ্ধার সাথে একমত নই এবং মনে করি এটি একটি কার্যকর উত্তর, @ ডেটজ - ওপি'র প্রশ্নটি বর্তমানে কথিত অনুমান হিসাবে রয়েছে যে হয় কোনও বিল্ট-ইন ফাংশন রয়েছে বা তাকে নিজের লেখা থাকতে হবে, তবে এটি সত্য নয়। ওপি'র প্রস্তাবিত সমাধানগুলির যে কোনও একটির বিকল্প হিসাবে ইউটিলিটি লাইব্রেরিগুলিকে চিহ্নিত করা আমার পক্ষে যুক্তিযুক্ত বলে মনে হয়। তবে আপনার যুক্তিটি প্রতিরক্ষামূলক এবং আপনার ভোট আপনার নিজের।
মার্ক আমেরিকা

16

প্রয়োগ হিসাবে একই, এখন স্প্রেড সহ :

const maxDate = new Date(Math.max(...dates));

(সেরা উত্তরের একটি মন্তব্য হতে পারে)


12

যেহেতু তারিখগুলি ইউনিক্সের যুগে (সংখ্যা) রূপান্তরিত হয়, আপনি সেগুলি খুঁজতে ম্যাথ.ম্যাক্স / মিনিট ব্যবহার করতে পারেন:

var maxDate = Math.max.apply(null, dates)
// convert back to date object
maxDate = new Date(maxDate)

(শুধুমাত্র ক্রোমে পরীক্ষিত, তবে বেশিরভাগ ব্রাউজারে কাজ করা উচিত)


8

** স্প্রেড অপারেটর ব্যবহার করুন | ES6 **

let datesVar = [ 2017-10-26T03:37:10.876Z,
  2017-10-27T03:37:10.876Z,
  2017-10-23T03:37:10.876Z,
  2015-10-23T03:37:10.876Z ]

Math.min(...datesVar);

এটি অ্যারে থেকে সর্বনিম্ন তারিখ দেবে।

এর শর্টহ্যান্ড ম্যাথ.মিন.অ্যাপ্লি (নাল, অ্যারেঅফিডেটস);


1
আপনি যদি ডাউনটিভোট করেন তবে কমেন্ট করুন। কেন এটি একটি খারাপ বিকল্প? আমি সিনট্যাক্সটি পছন্দ করি এবং ছোট অ্যারেগুলির জন্য, পারফরম্যান্স পেনাল্টি নগন্য is
গিজসানবি

1
আমি হতাশ ছিল। রুদ্রেশের উত্তর আমার উপরের একটি সদৃশ। লোকেরা কেন এটি পছন্দ করে না ধারণা নেই। এটি বহু লাইনের বিপরীতে কোডের একক লাইন।

3
এটি একটি সংখ্যা তারিখ নয়, এমনটি ফেরত দেয় যাতে আপনাকে এটিকে আবার কোনও তারিখে রূপান্তর করতে হয়। তবে এটি অন্যথায় বেশ মার্জিত।
টম হেবলবাউর

6

ONELINER :

var min= dates.sort((a,b)=>a-b)[0], max= dates.slice(-1)[0];

ভেরিয়েবলের ফলাফল minএবং max, জটিলতা হে (nlogn) , সম্পাদনাযোগ্য উদাহরণ এখানে । যদি আপনার অ্যারেতে কোনও তারিখের মান না থাকে (যেমন null) প্রথমে এটি পরিষ্কার করুন dates=dates.filter(d=> d instanceof Date);



1

উপরের উত্তরগুলি খালি / অপরিজ্ঞাত মানগুলি হ্যান্ডেল করে না এটি ঠিক করার জন্য আমি নীচের কোডটি ব্যবহার করেছি এবং ফাঁকা স্থানগুলি এনএ দিয়ে প্রতিস্থাপন করেছি:

function getMax(dateArray, filler) {
      filler= filler?filler:"";
      if (!dateArray.length) {
        return filler;
      }
      var max = "";
      dateArray.forEach(function(date) {
        if (date) {
          var d = new Date(date);
          if (max && d.valueOf()>max.valueOf()) {
            max = d;
          } else if (!max) {
            max = d;
          }
        }
      });
      return max;
    };
console.log(getMax([],"NA"));
console.log(getMax(datesArray,"NA"));
console.log(getMax(datesArray));

function getMin(dateArray, filler) {
 filler = filler ? filler : "";
  if (!dateArray.length) {
    return filler;
  }
  var min = "";
  dateArray.forEach(function(date) {
    if (date) {
      var d = new Date(date);
      if (min && d.valueOf() < min.valueOf()) {
        min = d;
      } else if (!min) {
        min = d;
      }
    }
  });
  return min;
}

console.log(getMin([], "NA"));
console.log(getMin(datesArray, "NA"));
console.log(getMin(datesArray));

আমি এখানে একটি সরল জাভাস্ক্রিপ্ট ডেমো যুক্ত করেছি এবং এ কোডেপিতে অ্যাঙ্গুলারজেএস এর সাথে ফিল্টার হিসাবে ব্যবহার করেছি


0

এটি করার এটি একটি দুর্দান্ত উপায় (আপনি অবজেক্টের বৈশিষ্ট্যগুলির মধ্যে একটির ব্যবহার করে বেশিরভাগ অবজেক্টের অ্যারে পেতে পারেন): Math.max.apply(Math,array.map(function(o){return o.y;}))

এটি এই পৃষ্ঠার জন্য স্বীকৃত উত্তর: অবজেক্টগুলির একটি অ্যারেতে একটি বৈশিষ্ট্যের সর্বাধিক মান সন্ধান করা


-2

তারিখগুলির একটি অ্যারে পুনরাবৃত্তি করতে মোমেন্ট , অ্যান্ডস্কোর এবং jQuery ব্যবহার করে ।

নমুনা JSON:

"workerList": [{        
        "shift_start_dttm": "13/06/2017 20:21",
        "shift_end_dttm": "13/06/2017 23:59"
    }, {
        "shift_start_dttm": "03/04/2018 00:00",
        "shift_end_dttm": "03/05/2018 00:00"        
    }]

javascript:

function getMinStartDttm(workerList) {  
    if(!_.isEmpty(workerList)) {
        var startDtArr = [];
        $.each(d.workerList, function(index,value) {                
            startDtArr.push(moment(value.shift_start_dttm.trim(), 'DD/MM/YYYY HH:mm')); 
         });            
         var startDt = _.min(startDtArr);           
         return start.format('DD/MM/YYYY HH:mm');
    } else {
        return '';
    }   
}

আশা করি এটা সাহায্য করবে.

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