जावास्क्रिप्ट में दिनांक फ़ॉर्मेटिंग: केवल "स्ट्रिंग्स जोड़ना" नहीं
\n\nप्रश्न "How do I format a date in JavaScript?" — Stack Overflow पर सबसे लोकप्रिय प्रश्नों में से एक है। और यह उचित भी है। हर डेवलपर कम से कम एक बार ऐसी स्थिति का सामना करता है जहाँ दिनांक को मानक प्रारूप "Fri Feb 14 2025 12:00:00 GMT+0300" में नहीं, बल्कि सुंदर रूप में प्रदर्शित करने की आवश्यकता होती है: "14 फरवरी 2025" या "2025-02-14"। यह आसान लगता है, है ना? लेकिन यहाँ कई छिपी समस्याएँ और प्रदर्शन संबंधी समस्याएँ हैं।
\n\nइस लेख में, हम जावास्क्रिप्ट में दिनांक फ़ॉर्मेट करने के सभी तरीकों पर चर्चा करेंगे: सबसे सरल से लेकर उच्च-प्रदर्शन वाले तक। आप सीखेंगे कि सामान्य गलतियों से कैसे बचें और कोड को न केवल सुंदर बल्कि तेज़ भी बनाएं। चलिए शुरू करते हैं!
\n\nनेटिव Date इतना असुविधाजनक क्यों है?
\n\nजावास्क्रिप्ट में अंतर्निहित Date ऑब्जेक्ट, इसे हल्के शब्दों में कहें तो, "अतीत का बोझ" है। यह Python या PHP की तरह कोई अंतर्निहित format() विधि प्रदान नहीं करता है। इसके बजाय, आपको गेटर्स का उपयोग करके मैन्युअल रूप से दिनांक बनानी होती है:
const date = new Date();\nconst day = String(date.getDate()).padStart(2, '0');\nconst month = String(date.getMonth() + 1).padStart(2, '0');\nconst year = date.getFullYear();\nconsole.log(`${year}-${month}-${day}`); // "2025-02-14"\n\nयह काम करता है, लेकिन बोझिल लगता है। और यदि आपको दिनांक को स्थानीयकृत करने की आवश्यकता है (उदाहरण के लिए, हिंदी में), तो कोड अनुपातहीन रूप से बड़ा हो जाता है। यही कारण है कि डेवलपर्स विकल्पों की तलाश करते हैं।
\n\ntoLocaleDateString विधि: सरल और तेज़
\n\nजावास्क्रिप्ट में दिनांक फ़ॉर्मेट करने का सबसे सरल तरीका toLocaleDateString() विधि का उपयोग करना है। यह एक लोकेल और विकल्पों वाला एक ऑब्जेक्ट लेता है:
const date = new Date();\nconst options = { year: 'numeric', month: 'long', day: 'numeric' };\nconsole.log(date.toLocaleDateString('hi-IN', options)); // "14 फरवरी 2025"\n\nयह विधि स्वचालित रूप से लोकेल के अनुसार समायोजित हो जाती है। "February 14, 2025" चाहते हैं? बस लोकेल को 'en-US' में बदलें।
लाभ:
\n- \n
- उपयोग में सरलता। \n
- अंतर्निहित स्थानीयकरण। \n
- कोड प्राकृतिक भाषा की तरह पढ़ा जाता है। \n
नुकसान:
\n- \n
- प्रदर्शन:
toLocaleDateString()का प्रत्येक कॉल एक नया फ़ॉर्मेटर ऑब्जेक्ट बनाता है। 1000 तत्वों वाले लूप में, यह ध्यान देने योग्य हो सकता है। - प्रारूप पर सीमित नियंत्रण (उदाहरण के लिए, आप वर्ष के बिना "14.02.2025" प्रदर्शित नहीं कर सकते)।
Intl.DateTimeFormat: शक्तिशाली और कुशल
\n\nअधिक सूक्ष्म नियंत्रण और अनुकूलन के लिए, Intl.DateTimeFormat का उपयोग करें। यह एक ऑब्जेक्ट है जिसे एक बार बनाया जा सकता है और बार-बार उपयोग किया जा सकता है:
const formatter = new Intl.DateTimeFormat('hi-IN', {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit'\n});\n\nconst date1 = new Date();\nconst date2 = new Date('2024-12-25');\nconsole.log(formatter.format(date1)); // "14.02.2025"\nconsole.log(formatter.format(date2)); // "25.12.2024"\n\nयह तेज़ क्यों है? क्योंकि फ़ॉर्मेटर ऑब्जेक्ट एक बार बनाया जाता है, हर कॉल पर नहीं। प्रदर्शन परीक्षणों में, लूप में Intl.DateTimeFormat, toLocaleDateString() से 5-10 गुना तेज़ पाया गया है।
इसके अलावा, Intl.DateTimeFormat अतिरिक्त विकल्पों का समर्थन करता है, जैसे weekday, hour, minute, second और यहाँ तक कि timeZone भी:
const formatter = new Intl.DateTimeFormat('en-US', {\n weekday: 'long',\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n hour: '2-digit',\n minute: '2-digit'\n});\nconsole.log(formatter.format(new Date())); // "Friday, Feb 14, 2025, 12:00 PM"\n\nएक पेचीदा सवाल: यदि आपको बिना स्थानीयकरण के "2025-02-14" प्रारूप में दिनांक प्रदर्शित करने की आवश्यकता हो तो क्या होगा? Intl.DateTimeFormat अलग से घंटे, मिनट और सेकंड प्रदर्शित नहीं कर सकता, लेकिन सरल दिनांकों के लिए यह