JavaScript में तिथियों की तुलना: अनुकूलन और प्रदर्शन

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

JavaScript में तिथियों की तुलना: गलतियों से बचें और कोड को तेज़ बनाएं

\n\n

कल्पना करें: आप एक ऑनलाइन स्टोर बना रहे हैं, और आपको जाँचना है कि क्या किसी उत्पाद पर छूट समाप्त हो गई है। या आप एक टास्क कैलेंडर बना रहे हैं जहाँ आज के इवेंट को फ़िल्टर करना है। या आप एनालिटिक्स बना रहे हैं — "पिछले सप्ताह के सभी ऑर्डर दिखाएं"। हर जगह आपको दो तारीखों की तुलना करनी होगी। आसान लगता है, है ना? लेकिन JavaScript, हमेशा की तरह, कुछ सरप्राइज़ देने के लिए तैयार है।

\n\n

Stack Overflow पर "Compare two dates with JavaScript" सवाल ने हज़ारों व्यूज़ जुटाए हैं — और यह कोई संयोग नहीं है। डेवलपर्स, अनुभवी भी, अक्सर तारीखों के साथ काम करने की गैर-स्पष्ट विशेषताओं पर फिसल जाते हैं। इस लेख में हम सिर्फ यह नहीं दिखाएंगे कि दो तारीखों की तुलना कैसे करें, बल्कि यह भी समझाएंगे कि कौन सा तरीका तेज़ है और कौन सा ज़्यादा सुरक्षित है। चलिए शुरू करते हैं!

\n\n

सीधी तुलना क्यों काम नहीं करती?

\n\n

शुरुआत करते हैं शुरुआती लोगों की एक क्लासिक गलती से। मान लीजिए हमारे पास दो तारीखें हैं:

\n\n
let date1 = new Date('2024-03-15');\nlet date2 = new Date('2024-03-20');\n\nconsole.log(date1 < date2);  // true\nconsole.log(date1 > date2);  // false\nconsole.log(date1 == date2); // false\n
\n\n

< और > ऑपरेटरों के साथ सब कुछ ठीक काम करता है। JavaScript Date ऑब्जेक्ट को संख्याओं (मिलीसेकंड) में बदल देता है और उनकी तुलना करता है। लेकिन == ऑपरेटर (और सख्त ===) अलग व्यवहार करता है। यह ऑब्जेक्ट के संदर्भों (references) की तुलना करता है, न कि उनके मानों की। दो अलग-अलग तारीखें दो अलग-अलग ऑब्जेक्ट हैं, इसलिए == हमेशा false लौटाएगा, भले ही तारीखें मिलीसेकंड तक मेल खाती हों।

\n\n

यह पहला जाल है। यहाँ से सीख: तारीखों की तुलना के लिए कभी भी == या === का उपयोग न करें। केवल <, >, <=, >= या विशेष विधियों का उपयोग करें।

\n\n

getTime() विधि: तारीख तुलना का सुनहरा मानक

\n\n

सबसे भरोसेमंद और प्रदर्शनकारी तरीका getTime() विधि का उपयोग करना है। यह 1 जनवरी 1970 (Unix-युग) से बीत चुके मिलीसेकंड की संख्या लौटाता है। और JavaScript संख्याओं की तुलना बहुत अच्छी तरह से करता है:

\n\n
let date1 = new Date('2024-03-15T10:00:00');\nlet date2 = new Date('2024-03-15T10:00:00');\nlet date3 = new Date('2024-03-20T10:00:00');\n\nconsole.log(date1.getTime() === date2.getTime()); // true\nconsole.log(date1.getTime() < date3.getTime());   // true\nconsole.log(date1.getTime() > date3.getTime());   // false\n
\n\n

यह प्रभावी क्यों है? क्योंकि getTime() एक बहुत हल्की (lightweight) ऑपरेशन है। यह बस Date ऑब्जेक्ट के अंदर पहले से संग्रहीत संख्यात्मक मान को लौटाता है। कोई पार्सिंग नहीं, कोई अतिरिक्त गणना नहीं। बस एक संख्या।

\n\n

आइए प्रदर्शन मापें। ब्राउज़र कंसोल में एक छोटा परीक्षण:

\n\n
let date1 = new Date('2024-01-01');\nlet date2 = new Date('2024-12-31');\n\nconsole.time('getTime');\nfor (let i = 0; i < 1000000; i++) {\n    date1.getTime() < date2.getTime();\n}\nconsole.timeEnd('getTime');\n// परिणाम: आधुनिक ब्राउज़रों में ~5-10 ms\n
\n\n

10 मिलीसेकंड में दस लाख तुलनाएँ — यह एक शानदार परिणाम है। तुलना के लिए, वैकल्पिक विधियाँ 2-3 गुना धीमी हो सकती हैं।

\n\n

valueOf() का उपयोग करके तारीखों की तुलना

\n\n

valueOf() विधि वही करती है जो getTime() करता है — तारीख का संख्यात्मक प्रतिनिधित्व लौटाती है। लेकिन एक बारीकियाँ हैं: तुलना ऑपरेटरों (<, > आदि) का उपयोग करते समय, JavaScript Date ऑब्जेक्ट के लिए अंतर्निहित रूप से valueOf() को कॉल करता है। यानी यह कोड:

\n\n
let date1 = new Date('2024-03-15');\nlet date2 = new Date('2024-03-20');\nconsole.log(date1 < date2);\n
\n\n

वास्तव में इस तरह काम करता है:

\n\n
console.log(date1.valueOf() < date2.valueOf());\n
\n\n

इसलिए सरल < और > तुलनाओं के लिए, आप सीधे Date ऑब्जेक्ट का उपयोग कर सकते हैं। लेकिन सटीक समानता (===) के लिए यह काम नहीं करेगा, और यहाँ getTime() या va

ब्लॉग

पुस्तक अनुशंसाएँ