अगर दो तिथियों की एक ही तारीख की जानकारी है, तो जाँच करना


83

अगर दो अलग-अलग तारीख वस्तुओं में एक ही तारीख की जानकारी (एक ही दिन, महीने, वर्ष ...) हो, तो मैं कैसे जांच सकता हूं? मैंने "==", "===" और। असमान कोशिश की है, लेकिन कोई भी काम नहीं कर रहा है।

जवाबों:


139

आप उपयोग कर सकते हैं valueOf()या getTime():

a = new Date(1995,11,17);
b = new Date(1995,11,17);

a.getTime() === b.getTime() // prints true

18
क्योंकि >=मूल्यों के मामले में संख्याओं में परिवर्तित हो जाते हैं। ==वस्तुओं के मामले में खुद की तुलना की जाती है (और केवल a == aसच होगा)।
फेलिक्स क्लिंग

8
केवल यह इंगित करते हुए कि इस समाधान के लिए यह आवश्यक है कि तिथियों में केवल तिथि वाले भाग शामिल हों, जबकि इस सवाल पर आने वाले बहुत से लोगों की अलग-अलग आवश्यकताएं हो सकती हैं ( उदाहरण के लिए jsFiddle में समय भागों के साथ )
काइलमिट

1
तो सुनिश्चित करें कि समय भागों में 0 धन्यवाद करने के लिए सेट कर रहे हैं हो सकता है जब इस का उपयोग करते हुए setHours में कार्य :a.setHours(0,0,0,0);
कुंडल

1
मिलिसेकंड का कोई अंतर होने पर यह काम नहीं करेगा। चूंकि getTime()मिलीसेकंड में समय लौटता है, इसलिए दोनों समय मिलिसेकंड का अंतर भी हो सकता है। इस समाधान में, यह अपेक्षा के अनुरूप काम नहीं करेगा। उपयोग करने का प्रयास करेंtoDateString()
रेहान सत्तार

41

यदि आप समय की परवाह किए बिना उसी दिन की तारीखों की जाँच करने में रुचि रखते हैं तो आप तुलना करने के लिए toDateString() विधि का उपयोग कर सकते हैं । यह विधि बिना समय के केवल दिनांक लौटाती है:

var start = new Date('2015-01-28T10:00:00Z');
var end = new Date('2015-01-28T18:00:00Z');

if (start.toDateString() === end.toDateString()) {
  // Same day - maybe different times
} else {
  // Different day
}

40

मैंने इस कोड का उपयोग किया है:

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

तो आप बस इसे कॉल करें: if (aDate.isSameDateAs(otherDate)) { ... }


जब आप सिर्फ दो बार गेटटाइम () का उपयोग कर सकते हैं तो आप एक दर्जन से अधिक कार्य क्यों करेंगे? ओह, क्या आप घंटे, महीने, और वर्ष में अंतर की अनदेखी के बारे में सोच रहे थे? उस मामले में शायद समय क्षेत्र की बातें मायने रखने लगती हैं?
एरिक

13
क्योंकि सवाल था "दो अलग-अलग तारीख वस्तुओं में एक ही तारीख की जानकारी है", और यह कोड बस यही करता है: समय की परवाह किए बिना तारीखों की तुलना करता है
आकस्मिक रूप से

2
एर, मेरा कहने का मतलब था "घंटे, मिनट और दूसरे में अंतर की अनदेखी"
एरिक


6

Hellnar,

आप कोशिश कर सकते हैं (फ़ंक्शन नाम को माफ़ कर दें :) - फ़ेलिक्स के मूल्य के अनुसार संशोधित किया गया, बजाय गेटटाइम के)

function isEqual(startDate, endDate) {
    return endDate.valueOf() == startDate.valueOf();
}

उपयोग:

if(isEqual(date1, date2)){
   // do something
}

हो सकता है कि आप वहां का हिस्सा पा लें।

यह सभी देखें:

'Http://www.java2s.com/Tutorial/JavaScript/0240__Date/DatevalueOf.htm'


4

बेहतर डेट सपोर्ट के लिए मोमेंट.जेएस और आईसम विधि का उपयोग करें

var starDate = moment('2018-03-06').startOf('day');
var endDate  = moment('2018-04-06').startOf('day');

console.log(starDate.isSame(endDate)); // false ( month is different )

var starDate = moment('2018-03-06').startOf('day');
var endDate  = moment('2018-03-06').startOf('day');

console.log(starDate.isSame(endDate)); // true ( year, month and day are the same )

3

उन्हें घटाएं और शून्य की तुलना करें:

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

// तारीखों के साथ कुछ करो ...

(date1 - date2) ? alert("not equal") : alert("equal");

इसे एक चर में डालने के लिए:

var datesAreSame = !(date1 - date2);

3

दो तिथियों के बराबर होने पर निर्धारित करने के लिए एक सरल सिंगल लाइन विकल्प, समय भाग की अनदेखी:

function isSameDate(a, b) {
    return Math.abs(a - b) < (1000 * 3600 * 24) && a.getDay() === b.getDay();
}

यह निर्धारित करता है कि तारीखें और बी एक दिन से अधिक भिन्न नहीं हैं और सप्ताह के एक ही दिन साझा करें।

function isSameDate(a, b) {
    return Math.abs(a - b) < (1000 * 3600 * 24) && a.getDay() === b.getDay();
}

console.log(isSameDate(new Date(2017, 7, 21), new Date(2017, 7, 21))); //exact same date => true
console.log(isSameDate(new Date(2017, 7, 21, 23, 59, 59), new Date(2017, 7, 21))); //furthest same dates => true
console.log(isSameDate(new Date(2017, 7, 20, 23, 59, 59), new Date(2017, 7, 21))); //nearest different dates => false
console.log(isSameDate(new Date(2016, 7, 21), new Date(2017, 7, 21))); //different year => false
console.log(isSameDate(new Date(2017, 8, 21), new Date(2017, 7, 21))); //different month => false

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.