জাভাস্ক্রিপ্টের সাথে দুটি তারিখের তুলনা করুন


1949

কেউ কি জাভাস্ক্রিপ্ট ব্যবহার করে অতীতে নয়, তার চেয়ে দু'টি তারিখের মানগুলির তুলনা করার কোনও উপায় প্রস্তাব করতে পারেন ? মানগুলি পাঠ্য বাক্স থেকে আসবে।


17
জেএসে ডেটটাইম এবং হেরফের যখন আসে তখন আমি মুহুর্তের চেয়ে আর দেখতে পাই না :)
হ্যালসিওন

47
2 তারিখ তুলনা করতে momentjs ব্যবহার করার প্রয়োজন নেই। খাঁটি জাভাস্ক্রিপ্টের তারিখ অবজেক্টটি ব্যবহার করুন। আরও তথ্যের জন্য প্রধান উত্তর পরীক্ষা করুন।
লুকাশ লিসিস

আপনি নিম্নলিখিত উত্তর পাঠাতে পারেন: stackoverflow.com/questions/4812152/... getDateDifference এবং getDifferenceInDays চেক করুন যদি এটি সাহায্য করতে পারেন।
বিকাশ রাজপুরোহিত

আমি আপনাকে মোমেন্ট.জেএস ( যা আমি ভালোবাসি, তবে ... ) এর চেয়ে আরও সন্ধান করার কারণ দেব : লুপিং লোডগুলির জন্য ব্যবহার করবেন না
গিক স্টক

সময়ের পার্থক্যটি ইউনিটগুলিতে বিভক্ত করার জন্য একটি দরকারী কার্যের জন্য (সেকেন্ড, মিনিট, ঘন্টা, ইত্যাদি), উত্তর দেখুন stackoverflow.com/questions/1968167/… । এই উত্তরটি এখন স্ট্যাকওভারফ্লো . com/a/46529159/3787376 এও উপলব্ধ ।
এডওয়ার্ড

উত্তর:


2283

তারিখ বস্তুর , তারপর প্রত্যেক তারিখের কনস্ট্রাক্ট ব্যবহার করে তাদের তুলনা - আপনি যা চান তা কি করতে হবে >, <, <=বা >=

==, !=, ===, এবং !==অপারেটরদের আপনি ব্যবহার করতে প্রয়োজন date.getTime()হিসাবে

var d1 = new Date();
var d2 = new Date(d1);
var same = d1.getTime() === d2.getTime();
var notSame = d1.getTime() !== d2.getTime();

পরিষ্কার হওয়ার জন্য কেবল তারিখের অবজেক্টের সাথে সরাসরি সাম্যের জন্য পরীক্ষা করা কার্যকর হবে না

var d1 = new Date();
var d2 = new Date(d1);

console.log(d1 == d2);   // prints false (wrong!) 
console.log(d1 === d2);  // prints false (wrong!)
console.log(d1 != d2);   // prints true  (wrong!)
console.log(d1 !== d2);  // prints true  (wrong!)
console.log(d1.getTime() === d2.getTime()); // prints true (correct)

আমি আপনাকে টেক্সট বাক্সের পরিবর্তে ড্রপ-ডাউনগুলি বা তারিখের প্রবেশের অনুরূপ কিছু সীমাবদ্ধ ফর্মটি ব্যবহার করার পরামর্শ দিচ্ছি, যদিও না হয় আপনি নিজেকে ইনপুট বৈধতা নরকে খুঁজে পান।


64
এমনকি এসের পদ্ধতিও ব্যর্থ নয় fe আপনাকে প্রথমে মিলিসেকেন্ডগুলি পুনরায় সেট করতে হবে এবং আপনি পুরো সময়টি পুনরায় সেট করতেও পারেন। date1.setHours (0); date1.setMinutes (0); date1.setSeconds (0); date1.setMilliseconds (0); .GetTime () ব্যবহারের সাথে মিলিত এটি আপনাকে একটি সঠিক তুলনা ফলাফল দেবে
প্যাট্রিক

102
@ পেট্রিক, setHours(0,0,0,0)এভাবে কল করার পরামর্শ দিন । কলিং setMinutes()ইত্যাদির প্রয়োজনীয়তা দূর করে Also এছাড়াও, দ্রুত কার্যকর করে।
কার্ল

26
পছন্দসই ফলাফল পেতে == বা === এড়ানো হচ্ছে: jsfiddle.net/P4y5J এখন> = অন্য এখন && এখন <= অন্য এখন সত্য FYI
জেসন সেব্রিং

5
toString()উভয় তারিখে সহজ পদ্ধতিটি কেন ব্যবহার করবেন না এবং তারপরে ==অপারেটরের সাথে তুলনা করবেন না কেন? সময়টি পুনরায় সেট করা এবং তারপরে তুলনা করার চেয়ে অনেক সহজ বলে মনে হচ্ছে, এর জন্য কোনও ত্রুটি আছে কি?
ব্যবহারকারী2019515

13
আপনি নিজের তারিখের সংখ্যাসূচক মানগুলিও তুলনা করতে পারেন যাতে বস্তুগুলি তাদের সাথে তুলনা করা যায়: তারিখ 1.valueOf () == তারিখ 2.valueOf ()
ম্যাডপ্রাগ

421

জাভাস্ক্রিপ্টে তারিখগুলির তুলনা করার সহজতম উপায় হ'ল প্রথমে এটি একটি তারিখের অবজেক্টে রূপান্তর করা এবং তারপরে এই তারিখ-অবজেক্টগুলির তুলনা করা।

নীচে আপনি তিনটি ফাংশন সহ একটি বস্তু খুঁজে পাবেন:

  • dates.compare (ক, খ)

    একটি নম্বর প্রদান করে:

    • -1 যদি একটি <বি
    • 0 যদি a = খ
    • 1 যদি ক> খ
    • নাএন যদি ক বা খ অবৈধ তারিখ হয়
  • তারিখগুলি.রেঞ্জ (ডি, শুরু, শেষ)

    একটি বুলিয়ান বা NaN প্রদান করে:

    • সত্য যদি মধ্যে শুরু এবং শেষ (সহ)
    • মিথ্যা যদি ডি শুরু হওয়ার আগে বা শেষের পরে হয় ।
    • নাএন যদি এক বা একাধিক তারিখ অবৈধ হয়।
  • dates.convert

    অন্যান্য ফাংশন দ্বারা তাদের ইনপুটকে তারিখের অবজেক্টে রূপান্তর করতে ব্যবহৃত হয়। ইনপুট হতে পারে

    • একটি তারিখ- বিষয়: ইনপুটটি যেমনটি ফিরিয়ে দেওয়া হয়।
    • একটি অ্যারে : [বছর, মাস, দিন] হিসাবে ব্যাখ্যা করা। নোট মাস 0-11।
    • একটি সংখ্যা : 1 জানুয়ারী 1970 থেকে মিলসেকেন্ডের সংখ্যার হিসাবে ব্যাখ্যা (একটি টাইমস্ট্যাম্প)
    • একটি স্ট্রিং : "YYYY / MM / DD", "MM / DD / YYYY", "31 জানুয়ারী 2009" ইত্যাদির মতো বিভিন্ন আলাদা ফর্ম্যাটগুলি সমর্থিত is
    • একটি অবজেক্ট : বছর, মাস এবং তারিখের গুণাবলী সহ একটি অবজেক্ট হিসাবে ব্যাখ্যা করা। নোট মাস 0-11।

// Source: http://stackoverflow.com/questions/497790
var dates = {
    convert:function(d) {
        // Converts the date in d to a date-object. The input can be:
        //   a date object: returned without modification
        //  an array      : Interpreted as [year,month,day]. NOTE: month is 0-11.
        //   a number     : Interpreted as number of milliseconds
        //                  since 1 Jan 1970 (a timestamp) 
        //   a string     : Any format supported by the javascript engine, like
        //                  "YYYY/MM/DD", "MM/DD/YYYY", "Jan 31 2009" etc.
        //  an object     : Interpreted as an object with year, month and date
        //                  attributes.  **NOTE** month is 0-11.
        return (
            d.constructor === Date ? d :
            d.constructor === Array ? new Date(d[0],d[1],d[2]) :
            d.constructor === Number ? new Date(d) :
            d.constructor === String ? new Date(d) :
            typeof d === "object" ? new Date(d.year,d.month,d.date) :
            NaN
        );
    },
    compare:function(a,b) {
        // Compare two dates (could be of any type supported by the convert
        // function above) and returns:
        //  -1 : if a < b
        //   0 : if a = b
        //   1 : if a > b
        // NaN : if a or b is an illegal date
        // NOTE: The code inside isFinite does an assignment (=).
        return (
            isFinite(a=this.convert(a).valueOf()) &&
            isFinite(b=this.convert(b).valueOf()) ?
            (a>b)-(a<b) :
            NaN
        );
    },
    inRange:function(d,start,end) {
        // Checks if date in d is between dates in start and end.
        // Returns a boolean or NaN:
        //    true  : if d is between start and end (inclusive)
        //    false : if d is before start or after end
        //    NaN   : if one or more of the dates is illegal.
        // NOTE: The code inside isFinite does an assignment (=).
       return (
            isFinite(d=this.convert(d).valueOf()) &&
            isFinite(start=this.convert(start).valueOf()) &&
            isFinite(end=this.convert(end).valueOf()) ?
            start <= d && d <= end :
            NaN
        );
    }
}

11
(a > b) - (a < b)তারিখগুলি অ্যারে বাছাই করার জন্য দরকারী
nktssh

@ নিকিটা হ্যাঁ এটি হ'ল, এবং এমন একটি ফাংশন যা ফলাফলটি ফিরিয়ে দেয় Array.prototype.sortযতক্ষণ না সমস্ত মান বৈধ তারিখ থাকে can যদি সেখানে অবৈধ তারিখ থাকতে পারে তবে আমি এর মতো কিছু ব্যবহার করার পরামর্শ দিচ্ছিfunction ( a, b ) { a = a === undefined || a === null : NaN : a.valueOf( a ); b = a === undefined || b === null : NaN : a.valueOf( b ); return isFinite( a ) && isFinite( b ) ? ( a > b ) - ( a < b ) : NaN; }
কিছু

4
@ nktssh — সম্ভবত, তবে return a - bএটি সহজ এবং পুরো রিটার্নের বিবৃতিটি প্রতিস্থাপন করে।
রবজি

283

তুলনা করুন <এবং >ঠিক যথারীতি, তবে জড়িত যে কোনও কিছুতে =একটি +উপসর্গ ব্যবহার করা উচিত । তাই ভালো:

var x = new Date('2013-05-23');
var y = new Date('2013-05-23');

// less than, greater than is fine:
x < y; => false
x > y; => false
x === y; => false, oops!

// anything involving '=' should use the '+' prefix
// it will then compare the dates' millisecond values
+x <= +y;  => true
+x >= +y;  => true
+x === +y; => true

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


81
মারাত্মক ধীরে :) আমি x.getTime() === y.getTime()পদ্ধতিটি পছন্দ করি , উভয়ই পঠনযোগ্য এবং অত্যন্ত দ্রুত জাসস্পিফ
হাইজেনস্ট্রুউ

24
+অপারেটর একটি সংখ্যা মধ্যে অভিব্যক্তি রূপান্তর করতে চেষ্টা করে। Date.valueOf()রূপান্তর (যা একই জিনিস ফেরৎ যেমন জন্য ব্যবহার করা হয় Date.getTime()
সালমানের

13
@ ওউটারহুইজনট্রু দুটোই খুব দ্রুত (> ধীর ব্রাউজারে 3 মিলিয়ন ওপিএস)। আপনি যে পদ্ধতিটি আরও পঠনযোগ্য বলে মনে করেন সেগুলি ব্যবহার করুন
17:48 এ Eloims

13
নোট করুন যে '=' জড়িত কোনও কিছুর ক্ষেত্রে আপনার উত্তরের '+' উপসর্গ অংশটি ভুল হওয়া উচিত। <, <=, >এবং >=একই আলগোরিদিম (ব্যবহার বিমূর্ত রিলেশনাল তুলনা অ্যালগরিদম ) লোকচক্ষুর অন্তরালে।
সালমান এ

2
বিকাশকারী.মোজিলা.আর.ইন- ইউএস / ডকস / ওয়েবে / জাভা স্ক্রিপ্ট / রেফারেন্স/… আপনার উত্তরের জন্য ধন্যবাদ, আমি যে কাজটি কাজের সময়ে বিকাশ করি তা একটি ভয়ঙ্কর বাগ পেয়েছিল যা ট্র্যাক করা শক্ত ছিল।
গিউহায়ন লি

157

রিলেশনাল অপারেটরগুলি < <= > >=জাভাস্ক্রিপ্টের তারিখগুলির তুলনা করতে ব্যবহার করা যেতে পারে:

var d1 = new Date(2013, 0, 1);
var d2 = new Date(2013, 0, 2);
d1 <  d2; // true
d1 <= d2; // true
d1 >  d2; // false
d1 >= d2; // false

যাইহোক, সাম্যতা অপারেটরগুলি == != === !==(তারিখের মান) তারিখগুলি তুলনা করতে ব্যবহার করা যায় না কারণ :

  • দুটি স্বতন্ত্র বস্তু কখনও কঠোর বা বিমূর্ত তুলনার জন্য সমান হয় না।
  • অবজেক্টগুলির সাথে তুলনা করার একটি অভিব্যক্তি কেবলমাত্র সত্য যদি অপারেন্ডগুলি একই অবজেক্টটির উল্লেখ করে।

আপনি এই যে কোনও পদ্ধতি ব্যবহার করে সমতার জন্য তারিখের মান তুলনা করতে পারেন:

var d1 = new Date(2013, 0, 1);
var d2 = new Date(2013, 0, 1);
/*
 * note: d1 == d2 returns false as described above
 */
d1.getTime() == d2.getTime(); // true
d1.valueOf() == d2.valueOf(); // true
Number(d1)   == Number(d2);   // true
+d1          == +d2;          // true

উভয়ই Date.getTime()এবং Date.valueOf()1 জানুয়ারী, 1970, 00:00 ইউটিসি থেকে মিলিসেকেন্ডের সংখ্যাটি ফিরিয়ে দিন। উভয় Numberফাংশন এবং unary +অপারেটর valueOf()পর্দার পিছনে পদ্ধতি কল ।


স্ট্রিংকে তারিখ অবজেক্টে রূপান্তর করা কি নিরাপদ? এটি কি ব্যতিক্রম ছুঁড়ে ফেলতে পারে না বা বিশ্বাসযোগ্য ফলাফল দিতে পারে না? জেএসে কোমরিং তারিখগুলি করার সবচেয়ে নির্ভরযোগ্য উপায় কী হতে পারে? আপনি যখন অবিশ্বাস্য ফলাফল বলবেন, তারিখের ফর্ম্যাটটি পরিবর্তন হবে না তা নিশ্চিত হওয়ার পরেও কী এই পদ্ধতিটি বিভিন্ন / ভুল মান দিতে পারে -> এটি হবে "বৃহস্পতিবার, 10 আগস্ট 2017"। আপনার সহায়তা এখানে খুব প্রশংসা করা হয়।
ব্যবহারকারী2696258

এটি কি বিভিন্ন ওএস / ব্রাউজার / ডিভাইসে একই তারিখের মানের জন্য অবিশ্বাস্য ফলাফল দিতে পারে?
ব্যবহারকারী2696258

1
@ ব্যবহারকারী2696258 এটি দুটি তারিখের বস্তুর তুলনা করার সবচেয়ে নির্ভরযোগ্য উপায় । স্ট্রিংকে তারিখে রূপান্তর করা একটি আলাদা সমস্যা ... একটি তারিখ পার্সিং লাইব্রেরি ব্যবহার করুন বা আপনার নিজের সমাধানটি রোল করুন। Thursday, 10 Aug 2017অ-মানক ফর্ম্যাট এবং বিভিন্ন ব্রাউজারগুলি এটিকে আলাদাভাবে পার্স করতে পারে, বা একে একে পার্স করতে পারে না। নোট দেখুন Date.parse
সালমান এ

88

এখন পর্যন্ত সবচেয়ে সহজ পদ্ধতিটি হ'ল অন্য তারিখ থেকে একটি তারিখ বিয়োগ করে ফলাফলের তুলনা করা।

var oDateOne = new Date();
var oDateTwo = new Date();

alert(oDateOne - oDateTwo === 0);
alert(oDateOne - oDateTwo < 0);
alert(oDateOne - oDateTwo > 0);


68

জাভাস্ক্রিপ্টে তারিখের তুলনা করা বেশ সহজ ... জাভাস্ক্রিপ্টটিতে তারিখগুলির জন্য অন্তর্নির্মিত তুলনা সিস্টেম রয়েছে যা তুলনা করা এত সহজ করে তোলে ...

2 তারিখের মানের তুলনা করার জন্য কেবল এই পদক্ষেপগুলি অনুসরণ করুন, উদাহরণস্বরূপ আপনার কাছে 2 টি ইনপুট রয়েছে যার প্রতিটির একটি তারিখের মান থাকে Stringএবং আপনি সেগুলি তুলনা করার জন্য ...

1. আপনার কাছে একটি ইনপুট থেকে পাওয়া দুটি স্ট্রিং মান রয়েছে এবং আপনি সেগুলি তুলনা করতে চান, সেগুলি নীচের মত:

var date1 = '01/12/2018';
var date2 = '12/12/2018';

২. তাদেরকে Date Objectতারিখের মান হিসাবে তুলনা করা দরকার , সুতরাং তাদের সহজভাবে ব্যাখ্যা করে সরকারীভাবে তারিখে রূপান্তর করুন new Date(), আমি কেবল তাদের সরল ব্যাখ্যার সরলতার জন্য পুনরায় বরাদ্দ করি, তবে আপনি যেভাবে তা পছন্দ করতে পারেন:

date1 = new Date(date1);
date2 = new Date(date2);

3. এখন কেবল তাদের ব্যবহার করে তুলনা করুন> < >= <=

date1 > date2;  //false
date1 < date2;  //true
date1 >= date2; //false
date1 <= date2; //true

জাভাস্ক্রিপ্ট তারিখ তুলনা করুন


আমি দেখতে পেয়েছি যে তারিখগুলির তুলনা করার জন্য বেশিরভাগ সমাধান কোনও ব্রাউজারে কাজ করে। আমি যে সমস্যাটি অনুভব করেছি তা আইই এর সাথে ছিল। এই সমাধান বোর্ড জুড়ে কাজ করে। থেক্স এক্স আলিরেজা!
জোশুয়া ওগলেসি

2
এটি কাজ করে না। এবং এটি কাজ করা উচিত নয়। আপনি তারিখ অবজেক্ট তুলনা করছেন।
ম্যাক্সিসাম

3
@maxisam না, এটা কারণ তুলনা অপারেটরদের কাজ করে ( <, >, <=, >=) ব্যবহার হচ্ছে, তারিখ বস্তু UNIX যুগান্তকারী (সেকেন্ড) প্রথম রূপান্তরিত হয়, এবং এটি কাজ করে জরিমানা। তবে এটি করার সাধারণ ভুল হতে পারে date1 == date2যেখানে প্রকৃতপক্ষে কোনও ত্রুটিটি মান হিসাবে নয় তবে উদাহরণের সমতাটি পরীক্ষা করা হয় introduced এটিকে রোধ এবং তারিখ মান সমতার জন্য পরীক্ষা করার জন্য এই কাজ করবে: date1.valueOf() == date2.valueOf()অথবা খাটোdate1+0 == date2+0
humanityANDpeace

এমডিএন Note: Parsing of strings with Date.parse is strongly discouraged due to browser differences and inconsistencies. এবং Note: Parsing of date strings with the Date constructor (and Date.parse, they are equivalent) is strongly discouraged due to browser differences and inconsistencies.
এএএ

35

শুধুমাত্র দিনের তুলনা করুন (সময়ের উপাদান উপেক্ষা করে):

Date.prototype.sameDay = function(d) {
  return this.getFullYear() === d.getFullYear()
    && this.getDate() === d.getDate()
    && this.getMonth() === d.getMonth();
}

ব্যবহার:

if(date1.sameDay(date2)) {
    // highlight day on calendar or something else clever
}

এটা ভাল. তবে আমি যদি পরবর্তী ডে বা পূর্ববর্তী ডে তুলনা করি। আমি এই তারিখ.প্রোটোটাইপ.নেক্সটডে = ফাংশন (ডি) চেষ্টা করেছি {এইটি ফিরিয়ে দিন .getMonth (); } তারিখ.প্রোটোটাইপ.প্রিরিডাই = ফাংশন (ডি) {এইটি ফিরিয়ে দিন (); } তবে এটি কেবলমাত্র এই মাসে কাজ করবে। আমি কীভাবে মাস জুড়ে বা বছর জুড়ে তুলনা করব
পরেশ 3489227

32

কি ফর্ম্যাট?

আপনি যদি জাভাস্ক্রিপ্টের তারিখ অবজেক্টটি নির্মাণ করেন , আপনি মিলিসেকেন্ডের পার্থক্য পেতে কেবল তাদের বিয়োগ করতে পারেন (সম্পাদনা করুন: বা কেবল তাদের তুলনা করুন):

js>t1 = new Date()
Thu Jan 29 2009 14:19:28 GMT-0500 (Eastern Standard Time)
js>t2 = new Date()
Thu Jan 29 2009 14:19:31 GMT-0500 (Eastern Standard Time)
js>t2-t1
2672
js>t3 = new Date('2009 Jan 1')
Thu Jan 01 2009 00:00:00 GMT-0500 (Eastern Standard Time)
js>t1-t3
2470768442
js>t1>t3
true

1
বিয়োগটি একটি ভাল ধারণা কারণ এটি ==উপরে বর্ণিত তুলনা সমস্যাটি এড়িয়ে চলে ।
ডিভিস 1

আপনি জাভাস্ক্রিপ্ট REPL কী ব্যবহার করছেন?
হাইড

জেএসডিবি - jsdb.org দেখুন - আজকের দিনে আমি পাইথনটি আমার পছন্দের ভাষা, তবে এটি এখনও একটি দুর্দান্ত উপযোগিতা।
জেসন এস

1
@ স্টুয়ার্টপি.বেন্টলি আমি জানি না, কারণ আমি তাদের কোনও ব্যবহার করি না। আমি jsdb ব্যবহার করি।
জেসন এস

বিপুল পরিমাণ তারিখের মধ্য দিয়ে যাওয়ার সময় এটি সবচেয়ে কার্যকর বলে মনে হয় কারণ গেটটাইম () দিয়ে রূপান্তর করার দরকার নেই।
প্যাকারভালহো

16

আপনি এই কোডটি ব্যবহার করেন,

var firstValue = "2012-05-12".split('-');
var secondValue = "2014-07-12".split('-');

 var firstDate=new Date();
 firstDate.setFullYear(firstValue[0],(firstValue[1] - 1 ),firstValue[2]);

 var secondDate=new Date();
 secondDate.setFullYear(secondValue[0],(secondValue[1] - 1 ),secondValue[2]);     

  if (firstDate > secondDate)
  {
   alert("First Date  is greater than Second Date");
  }
 else
  {
    alert("Second Date  is greater than First Date");
  }

এবং এই লিঙ্কটি http://www.w3schools.com/js/js_obj_date.asp দেখুন


3
ডাব্লু 3 স্কুলগুলিকে উল্লেখ না করার একটি কারণ: w3fools.com - যদিও দুর্দান্ত সমাধান - এটি মানদণ্ডের মানদণ্ড এবং এটি কি সমস্ত ব্রাউজারে কাজ করে?
ম্যাথিয়াস লাইককেগার্ড লরেঞ্জেন

1
মজিলা বিকাশকারী নেটওয়ার্ককে আরও ভাল উল্লেখ করুন: developer.mozilla.org/en-US/docs/Web/JavaScript/References/…
ড্যানিয়েল লিডস্ট্রোম

16

সংক্ষিপ্ত উত্তর

এখানে একটি ফাংশন যা that বুলিয়ান> যদি ডেটটাইম> থেকে ডেটটাইম ডেমো কার্যকর হয় return

var from = '08/19/2013 00:00'
var to = '08/12/2013 00:00 '

function isFromBiggerThanTo(dtmfrom, dtmto){
   return new Date(dtmfrom).getTime() >=  new Date(dtmto).getTime() ;
}
console.log(isFromBiggerThanTo(from, to)); //true

ব্যাখ্যা

jsFiddle

var date_one = '2013-07-29 01:50:00',
date_two = '2013-07-29 02:50:00';
//getTime() returns the number of milliseconds since 01.01.1970.
var timeStamp_date_one = new Date(date_one).getTime() ; //1375077000000 
console.log(typeof timeStamp_date_one);//number 
var timeStamp_date_two = new Date(date_two).getTime() ;//1375080600000 
console.log(typeof timeStamp_date_two);//number 

যেহেতু এখন আপনি উভয় ডেটটাইম সংখ্যার ধরণের রয়েছেন তাই আপনি যে কোনও তুলনা ক্রিয়াকলাপের সাথে তাদের তুলনা করতে পারেন

(>, <, =,! =, ==,! ==,> = এবং <=)

তারপর

আপনি যদি সাথে পরিচিত হন C# কাস্টম তারিখ এবং সময় ফর্ম্যাট স্ট্রিংয়ের এই লাইব্রেরিতে একই জিনিসটি করা উচিত এবং আপনার তারিখ এবং সময় dtmFRM ফর্ম্যাট করতে সহায়তা করে আপনি তারিখের সময় স্ট্রিং বা ইউনিক্স ফর্ম্যাটে উত্তীর্ণ হচ্ছেন কিনা

ব্যবহার

var myDateTime = new dtmFRM();

alert(myDateTime.ToString(1375077000000, "MM/dd/yyyy hh:mm:ss ampm"));
//07/29/2013 01:50:00 AM

alert(myDateTime.ToString(1375077000000,"the year is yyyy and the day is dddd"));
//this year is 2013 and the day is Monday

alert(myDateTime.ToString('1/21/2014', "this month is MMMM and the day is dd"));
//this month is january and the day is 21

ডেমো

আপনাকে যা করতে হবে তা হ'ল লাইব্রেরি jsফাইলে থাকা এই বিন্যাসের যেকোনটি পাস করা


নতুন তারিখ (dtmfrom)> = নতুন তারিখ (dtmto) নতুন তারিখের তুলনায় অনেক ধীর (dtmfrom) .getTime ()> = নতুন তারিখ (dtmto) .getTime ()
মিনা গ্যাব্রিয়েল

সম্ভবত, তবে পার্থক্যটি ব্রাউজারের উপর নির্ভর করে অপারেশন প্রতি 30 থেকে 120 ন্যানোসেকেন্ডের (0.000000075 সেকেন্ড বলুন), তাই তাত্পর্যপূর্ণ নয়।
রবজি


14

দ্রষ্টব্য - কেবল তারিখের অংশের সাথে তুলনা করুন:

যখন আমরা জাভাস্ক্রিপ্টে দুটি তারিখ তুলনা করি। এটি ঘন্টা, মিনিট এবং সেকেন্ড সময়ও বিবেচনায় নেয় ... সুতরাং যদি আমাদের কেবলমাত্র তারিখের তুলনা করা প্রয়োজন তবে এটিই হল:

var date1= new Date("01/01/2014").setHours(0,0,0,0);

var date2= new Date("01/01/2014").setHours(0,0,0,0);

এখন: if date1.valueOf()> date2.valueOf()একটি কবজ মত কাজ করবে।


13
function datesEqual(a, b)
{
   return (!(a>b || b>a))
}

1
এ বা বি কী ধরণের? তারিখ? কি ফর্ম্যাট? এটি আমার সাথে কাজ করবে বলে মনে হয় না।
লুসি

5
অভিমানী aএবং bহচ্ছে Dateবস্তু আপনার কাছে ব্যবহার করতে পারেনreturn a*1 == b*1;
Udo জি

4
@ ইউডিজি: সংক্ষিপ্ত:+a == +b
এমপেন

13
var date = new Date(); // will give you todays date.

// following calls, will let you set new dates.
setDate()   
setFullYear()   
setHours()  
setMilliseconds()   
setMinutes()    
setMonth()  
setSeconds()    
setTime()

var yesterday = new Date();
yesterday.setDate(...date info here);

if(date>yesterday)  // will compare dates

11

বিদ্যমান বিদ্যমান বিকল্পগুলিতে কেবল আরও একটি সম্ভাবনা যুক্ত করতে আপনি চেষ্টা করতে পারেন:

if (date1.valueOf()==date2.valueOf()) .....

... যা আমার পক্ষে কাজ করে বলে মনে হচ্ছে। অবশ্যই আপনাকে নিশ্চিত করতে হবে যে উভয় তারিখ অপরিজ্ঞাত নয় ...

if ((date1?date1.valueOf():0)==(date2?date2.valueOf():0) .....

এইভাবে আমরা নিশ্চিত করতে পারি যে উভয়কেও অপরিজ্ঞাত করা হলে, বা ...

if ((date1?date1.valueOf():0)==(date2?date2.valueOf():-1) .....

... আপনি যদি তাদের সমান না হতে পছন্দ করেন।


11

মোমেন্ট.জেএস এর মাধ্যমে

জেএসফিডাল: http://jsfiddle.net/guhokemk/1/

function compare(dateTimeA, dateTimeB) {
    var momentA = moment(dateTimeA,"DD/MM/YYYY");
    var momentB = moment(dateTimeB,"DD/MM/YYYY");
    if (momentA > momentB) return 1;
    else if (momentA < momentB) return -1;
    else return 0;
}

alert(compare("11/07/2015", "10/07/2015"));

এর dateTimeAচেয়ে বেশি হলে পদ্ধতিটি 1 প্রদান করেdateTimeB

dateTimeAসমান হলে পদ্ধতিটি 0 প্রদান করেdateTimeB

এর dateTimeAচেয়ে কম হলে পদ্ধতিটি -1 প্রদান করেdateTimeB


3
Dateবস্তুর জন্য তারিখের তুলনা সম্পাদনের জন্য মোমেন্টের মতো বাহ্যিক গ্রন্থাগার ব্যবহার করার দরকার নেই ।
এমবি

আমার ব্যবহারের ক্ষেত্রে মুহুর্তটি একেবারে প্রয়োজনীয় ছিল। ধন্যবাদ, রাজন!
রেজারসিন্ট্যাক্স

1
কেন আপনি এমনকি ব্যবহার করছেন <বা >অপারেটার মুহূর্ত ইতিমধ্যে যেমন কুশলী তুলনা পদ্ধতি দিয়ে আসে যখন .isBeforeএবং .isAfter, এটা সব ডক্স
svarog

10

টাইমজোনটি সাবধান করুন

একটি জাভাস্ক্রিপ্ট তারিখের সময় অঞ্চল সম্পর্কে কোনও ধারণা নেই । "স্থানীয়" টাইমজোনটিতে স্ট্রিংগুলিতে এবং এর থেকে অনুবাদ করার জন্য কার্যকরী ফাংশন সহ এটি একটি মুহুর্ত (যুগের পর থেকে টিক্স)। আপনি যদি তারিখের অবজেক্টগুলি ব্যবহার করে খেজুর নিয়ে কাজ করতে চান, যেমন এখানকার প্রত্যেকেই করছেন, আপনি চান যে তারিখগুলি প্রশ্নটির তারিখের শুরুতে ইউটিসির মধ্যরাতের প্রতিনিধিত্ব করবে। এটি একটি সাধারণ এবং প্রয়োজনীয় কনভেনশন যা তাদের সৃষ্টির মরসুম বা সময় অঞ্চল নির্বিশেষে আপনাকে তারিখগুলি নিয়ে কাজ করতে দেয়। তাই টাইমজোনটির ধারণাটি পরিচালনা করার জন্য আপনাকে খুব সজাগ থাকতে হবে, বিশেষত যখন আপনি আপনার মধ্যরাতের ইউটিসি তারিখ অবজেক্টটি তৈরি করেন।

বেশিরভাগ সময়, আপনি আপনার তারিখটি ব্যবহারকারীর সময় অঞ্চলটি প্রতিফলিত করতে চান। আজ আপনার জন্মদিন হলে ক্লিক করুন । এনজেড এবং মার্কিন যুক্তরাষ্ট্রে ব্যবহারকারীরা একই সাথে ক্লিক করেন এবং বিভিন্ন তারিখ পান। সেক্ষেত্রে, এটি করুন ...

// create a date (utc midnight) reflecting the value of myDate and the environment's timezone offset.
new Date(Date.UTC(myDate.getFullYear(),myDate.getMonth(), myDate.getDate()));

কখনও কখনও, আন্তর্জাতিক তুলনামূলক স্থানীয় নির্ভুলতা ট্রাম্প। সেক্ষেত্রে, এটি করুন ...

// the date in London of a moment in time. Device timezone is ignored.
new Date(Date.UTC(myDate.getUTCYear(), myDate.getyUTCMonth(), myDate.getUTCDate()));

অন্যান্য উত্তরগুলির পরামর্শ অনুসারে এখন আপনি নিজের তারিখের অবজেক্টগুলি সরাসরি তুলনা করতে পারেন।

আপনি তৈরি করার সময় টাইমজোন পরিচালনা করার যত্ন নিয়েছেন, আপনি যখন আবার স্ট্রিং উপস্থাপনায় রূপান্তর করেন তখন আপনার অবশ্যই সময় অঞ্চলটি বাইরে রাখার বিষয়টি নিশ্চিত হওয়া উচিত। সুতরাং আপনি নিরাপদে ব্যবহার করতে পারেন ...

  • toISOString()
  • getUTCxxx()
  • getTime() //returns a number with no time or timezone.
  • .toLocaleDateString("fr",{timezone:"UTC"}) // whatever locale you want, but ALWAYS UTC.

এবং সম্পূর্ণরূপে অন্য সব কিছু এড়িয়ে চলুন, বিশেষত ...

  • getYear(), getMonth(),getDate()

8

বলুন যে আপনি A এবং B তারিখের অবজেক্ট পেয়েছেন, তাদের EPOC সময় মান পাবেন, তারপরে মিলি সেকেন্ডের মধ্যে পার্থক্য পেতে বিয়োগ করুন।

var diff = +A - +B;

এখানেই শেষ.


8

দুটি তারিখের তুলনা করতে আমরা ডেট.জেএস জাভাস্ক্রিপ্ট লাইব্রেরি ব্যবহার করতে পারি যা এখানে পাওয়া যাবে: https://code.google.com/archive/p/datejs/downloads

এবং Date.compare( Date date1, Date date2 )পদ্ধতিটি ব্যবহার করুন এবং এটি এমন একটি নম্বর প্রদান করবে যার অর্থ নিম্নলিখিত ফলাফলগুলি:

-1 = তারিখ 1 হল লেস্টান ডেট 2।

0 = মান সমান।

1 = তারিখ 1 হ'ল বৃহত্তর তারিখ 2।


8

দুটি তারিখ বিয়োগ করুন মিলি সেকেন্ডের মধ্যে পার্থক্য পান, যদি আপনি 0একই তারিখ পান

function areSameDate(d1, d2){
    return d1 - d2 === 0
}

7

জাভাস্ক্রিপ্টে বিনামূল্যে পাঠ্য থেকে তারিখগুলি তৈরি করতে আপনাকে এটিকে তারিখ () অবজেক্টে পার্স করতে হবে।

আপনি ডেট.পার্স () ব্যবহার করতে পারেন যা নিখরচায় পাঠ্যটিকে এটিকে নতুন তারিখে রূপান্তরিত করার চেষ্টা করে তবে পৃষ্ঠার উপর যদি আপনার নিয়ন্ত্রণ থাকে তবে আমি পরিবর্তে এইচটিএমএল নির্বাচন বাক্সগুলি বা YUI ক্যালেন্ডার নিয়ন্ত্রণ বা jQuery UI এর মতো একটি তারিখ চয়নকারী ব্যবহার করার পরামর্শ দেব would Datepicker

আপনার তারিখটি একবার অন্য লোকেরা নির্দেশ করে দেওয়ার পরে আপনি তারিখগুলি বিয়োগ করতে সহজ গাণিতিক ব্যবহার করতে পারেন এবং একটি দিনের সেকেন্ডের সংখ্যায় (সেকেন্ডে) বিভাজক করে এটিকে আবার বেশ কয়েকটি দিনে রূপান্তর করতে পারেন (60 * 60 * 24 = 86400)।


6
var date_today=new Date();
var formated_date = formatDate(date_today);//Calling formatDate Function

var input_date="2015/04/22 11:12 AM";

var currentDateTime = new Date(Date.parse(formated_date));
var inputDateTime   = new Date(Date.parse(input_date));

if (inputDateTime <= currentDateTime){
    //Do something...
}

function formatDate(date) {
    var hours = date.getHours();
    var minutes = date.getMinutes();
    var ampm = hours >= 12 ? 'PM' : 'AM';

    hours = hours % 12;
    hours = hours ? hours : 12; // the hour '0' should be '12'
    hours   = hours < 10 ? '0'+hours : hours ;

    minutes = minutes < 10 ? '0'+minutes : minutes;

    var strTime = hours+":"+minutes+ ' ' + ampm;
    return  date.getFullYear()+ "/" + ((date.getMonth()+1) < 10 ? "0"+(date.getMonth()+1) :
    (date.getMonth()+1) ) + "/" + (date.getDate() < 10 ? "0"+date.getDate() :
    date.getDate()) + " " + strTime;
}

5

"কিছু" দ্বারা পোস্ট করা কোডটির একটি উন্নত সংস্করণ

/* Compare the current date against another date.
 *
 * @param b  {Date} the other date
 * @returns   -1 : if this < b
 *             0 : if this === b
 *             1 : if this > b
 *            NaN : if a or b is an illegal date
*/ 
Date.prototype.compare = function(b) {
  if (b.constructor !== Date) {
    throw "invalid_date";
  }

 return (isFinite(this.valueOf()) && isFinite(b.valueOf()) ? 
          (this>b)-(this<b) : NaN 
        );
};

ব্যবহার:

  var a = new Date(2011, 1-1, 1);
  var b = new Date(2011, 1-1, 1);
  var c = new Date(2011, 1-1, 31);
  var d = new Date(2011, 1-1, 31);

  assertEquals( 0, a.compare(b));
  assertEquals( 0, b.compare(a));
  assertEquals(-1, a.compare(c));
  assertEquals( 1, c.compare(a));

সম্ভবত একটি সেই তারিখ উদাহরণ যা পদ্ধতিটি বলা হয়। যা যদি পারেন একটি একটি অবৈধ তারিখ হতে, কিন্তু এখনও একটি তারিখ উদাহরণস্বরূপ হবে?
রবিজি

5

নিম্নলিখিতটি যদি আপনার তারিখের ফর্ম্যাট হয় তবে আপনি এই কোডটি ব্যবহার করতে পারেন:

var first = '2012-11-21';
var second = '2012-11-03';
if(parseInt(first.replace(/-/g,""),10) > parseInt(second.replace(/-/g,""),10)){
   //...
}

20121121সংখ্যাটি তার চেয়ে বড় কিনা তা যাচাই করবে 20121103


4
এটি ইতিমধ্যে ISO8601 ফর্ম্যাটে থাকলে (YYYY-MM-DD) আপনার কোনও অক্ষর মুছে ফেলা বা এটি পূর্ণসংখ্যায় রূপান্তর করতে হবে না। শুধু স্ট্রিং তুলনা first == secondবা first < secondবা first > second। এমএম / ডিডি / ওয়াইওয়াই, ডিডি / এমএম / ওয়াই, ওয়াই / ডিডি / এমএম, ডিডি / ওয়াইওয়াই / এমএম বা এমএম / ওয়াই / ডিডি এর তুলনায় আইএসও 8601 এর সাথে এটি অনেকগুলি সুন্দরীর একটি।
কিছু

5

আমি সাধারণত ডাটাবেস Datesহিসাবে সংরক্ষণ করি timestamps(Number)

যখন আমার তুলনা করা দরকার, আমি কেবল সেই টাইমস্ট্যাম্পগুলির সাথে বা তুলনা করি

এটিকে তারিখ অবজেক্টে রূপান্তর করুন এবং তারপরে তুলনা করুন > <

নোট করুন যে == বা === আপনার ভেরিয়েবলগুলি একই তারিখের অবজেক্টের উল্লেখ না থাকলে সঠিকভাবে কাজ করে না।

সেই তারিখের অবজেক্টগুলিকে প্রথমে টাইমস্ট্যাম্পে (সংখ্যা) রূপান্তর করুন এবং তারপরে তাদের সমতার তুলনা করুন।


টাইমস্ট্যাম্প তারিখ

var timestamp_1970 = new Date(0).getTime(); // 1970-01-01 00:00:00
var timestamp = new Date().getTime(); // Current Timestamp

তারিখের টাইমস্ট্যাম্প

var timestamp = 0; // 1970-01-01 00:00:00
var DateObject = new Date(timestamp);

এটি সেরা উত্তর - এবং দ্রুততম jsperf.com/compering-date-objects
স্কট স্টেনসল্যান্ড

3

Datesবস্তুর তুলনা করার আগে , তাদের উভয় মিলিসেকেন্ড শূন্যের মতো সেট করার চেষ্টা করুন Date.setMilliseconds(0);

কিছু ক্ষেত্রে যেখানে Dateজাভাস্ক্রিপ্টে বস্তুটি গতিশীলভাবে তৈরি হয়েছে, আপনি যদি মুদ্রণ চালিয়ে যান Date.getTime(), আপনি মিলিসেকেন্ডগুলি দেখতে পাবেন যা উভয় তারিখের সমতা রোধ করবে prevent


3

কর্মক্ষমতা

আজ 2020.02.27 আমি ম্যাকওস হাই সিয়েরা ভি 10.13.6 এ ক্রোম ভি 80.0, সাফারি ভি 13.0.5 এবং ফায়ারফক্স 73.0.1 এ নির্বাচিত সমাধানগুলির পরীক্ষা করে নিই

উপসংহার

  • সমাধান d1==d2(ডি) এবং d1===d2(ই) সমস্ত ব্রাউজারের জন্য দ্রুত
  • সমাধান getTime(এ) valueOf(বি) এর চেয়ে দ্রুত (উভয় মাঝারি দ্রুত)
  • সমাধান এফ, এল, এন সমস্ত ব্রাউজারের জন্য সবচেয়ে ধীর

এখানে চিত্র বর্ণনা লিখুন

বিস্তারিত

নীচে কর্মক্ষমতা পরীক্ষায় ব্যবহৃত স্নিপেট সমাধানগুলি উপস্থাপন করা হয়। আপনি এখানে আপনার মেশিনে পরীক্ষা করতে পারেন

ক্রোমের জন্য ফলাফল

এখানে চিত্র বর্ণনা লিখুন


তবে d1==d2বা d1===d2প্রশ্নের প্রসঙ্গে নিরর্থক।
দ্য মাস্টার

1
        from_date ='10-07-2012';
        to_date = '05-05-2012';
        var fromdate = from_date.split('-');
        from_date = new Date();
        from_date.setFullYear(fromdate[2],fromdate[1]-1,fromdate[0]);
        var todate = to_date.split('-');
        to_date = new Date();
        to_date.setFullYear(todate[2],todate[1]-1,todate[0]);
        if (from_date > to_date ) 
        {
            alert("Invalid Date Range!\nStart Date cannot be after End Date!")

            return false;
        }

জাভাস্ক্রিপ্ট ব্যবহার করে তারিখের তুলনা করতে এই কোডটি ব্যবহার করুন।

ধন্যবাদ ডি জিভা


আমি মনে করি এটি একটি ভাল উত্তর কারণ আমাদের "ডিডি / মিমি / ওয়াই" ফর্ম্যাট রয়েছে এবং উভয় তারিখের তুলনা করতে আমাদের এটি করতে হবে। আমি জানি না এটি সেরা উত্তর কিনা তবে এটি যথেষ্ট। ভাগ করার জন্য আপনাকে ধন্যবাদ।
ড্যানিগনলাইনা

1
var curDate=new Date();
var startDate=document.forms[0].m_strStartDate;

var endDate=document.forms[0].m_strEndDate;
var startDateVal=startDate.value.split('-');
var endDateVal=endDate.value.split('-');
var firstDate=new Date();
firstDate.setFullYear(startDateVal[2], (startDateVal[1] - 1), startDateVal[0]);

var secondDate=new Date();
secondDate.setFullYear(endDateVal[2], (endDateVal[1] - 1), endDateVal[0]);
if(firstDate > curDate) {
    alert("Start date cannot be greater than current date!");
    return false;
}
if (firstDate > secondDate) {
    alert("Start date cannot be greater!");
    return false;
}

1

আমার এক প্রকল্পে আমি যা করেছি তা এখানে,

function CompareDate(tform){
     var startDate = new Date(document.getElementById("START_DATE").value.substring(0,10));
     var endDate = new Date(document.getElementById("END_DATE").value.substring(0,10));

     if(tform.START_DATE.value!=""){
         var estStartDate = tform.START_DATE.value;
         //format for Oracle
         tform.START_DATE.value = estStartDate + " 00:00:00";
     }

     if(tform.END_DATE.value!=""){
         var estEndDate = tform.END_DATE.value;
         //format for Oracle
         tform.END_DATE.value = estEndDate + " 00:00:00";
     }

     if(endDate <= startDate){
         alert("End date cannot be smaller than or equal to Start date, please review you selection.");
         tform.START_DATE.value = document.getElementById("START_DATE").value.substring(0,10);
         tform.END_DATE.value = document.getElementById("END_DATE").value.substring(0,10);
         return false;
     }
}

ফর্ম অনসমিট এ এটি কল। আশাকরি এটা সাহায্য করবে.

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