परिचय
\nवेब डेवलपमेंट में तिथि और समय के साथ काम करना सबसे आम, लेकिन सबसे मुश्किल कार्यों में से एक है। JavaScript में मानक Date ऑब्जेक्ट, अपनी बहुमुखी प्रतिभा के बावजूद, कई सीमाएँ रखता है: समय क्षेत्रों (UTC और स्थानीय समय के अलावा) के लिए अंतर्निहित समर्थन का अभाव, फ़ॉर्मेटिंग के लिए असुविधाजनक तरीके, और तिथियों के बीच अंतर की गणना करने में कठिनाई। इस लेख में, हम Node.js वातावरण में तिथियों के साथ काम करने की उन्नत तकनीकों पर चर्चा करेंगे, जो आपको विश्वसनीय और समझने योग्य कोड लिखने में मदद करेंगी।
1. Intl.DateTimeFormat: बिना थर्ड-पार्टी लाइब्रेरी के शक्तिशाली फ़ॉर्मेटिंग
\nआधुनिक JavaScript एक अंतर्निहित API Intl.DateTimeFormat प्रदान करता है, जो आपको लोकेल के अनुसार तिथियों और समय को लचीले ढंग से फ़ॉर्मेट करने की अनुमति देता है। यह एक आदर्श उपकरण है यदि आपको थर्ड-पार्टी लाइब्रेरी की पूरी शक्ति की आवश्यकता नहीं है।
बुनियादी उपयोग
\nलोकेल और विकल्पों वाला एक ऑब्जेक्ट पास करके फ़ॉर्मेटर का एक इंस्टेंस बनाएँ:
\nconst date = new Date('2024-12-25T10:30:00Z');\n\n// हिंदी लोकेल के लिए फ़ॉर्मेटिंग\nconst hiFormatter = new Intl.DateTimeFormat('hi-IN', {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n weekday: 'long',\n hour: '2-digit',\n minute: '2-digit',\n timeZone: 'Asia/Kolkata'\n});\n\nconsole.log(hiFormatter.format(date));\n// आउटपुट: "बुधवार, 25 दिसंबर 2024 को 04:00 अपराह्न"\n\nसमय क्षेत्रों के साथ काम करना
\nIntl.DateTimeFormat का मुख्य लाभ timeZone विकल्प के माध्यम से समय क्षेत्रों का समर्थन है। आप एक ही तिथि को विभिन्न क्षेत्रों में प्रदर्शित कर सकते हैं:
const date = new Date();\n\nconst formatters = {\n 'न्यूयॉर्क': new Intl.DateTimeFormat('en-US', { timeZone: 'America/New_York', dateStyle: 'full', timeStyle: 'long' }),\n 'टोक्यो': new Intl.DateTimeFormat('ja-JP', { timeZone: 'Asia/Tokyo', dateStyle: 'full', timeStyle: 'long' }),\n 'लंदन': new Intl.DateTimeFormat('en-GB', { timeZone: 'Europe/London', dateStyle: 'full', timeStyle: 'long' })\n};\n\nfor (const [city, fmt] of Object.entries(formatters)) {\n console.log(`${city}: ${fmt.format(date)}`);\n}\n\nतिथि श्रेणियों का फ़ॉर्मेटिंग
\nयह API formatRange विधि के साथ श्रेणियों को भी फ़ॉर्मेट कर सकता है:
const start = new Date('2024-01-01');\nconst end = new Date('2024-01-05');\n\nconst rangeFormatter = new Intl.DateTimeFormat('hi-IN', {\n month: 'long',\n day: 'numeric'\n});\n\nconsole.log(rangeFormatter.formatRange(start, end));\n// आउटपुट: "1–5 जनवरी"\n\n2. तिथियों में हेरफेर: जोड़ना, घटाना और अंतर
\nमानक Date अंकगणित के लिए उपयुक्त नहीं है। आइए दो दृष्टिकोणों पर विचार करें: शुद्ध JavaScript और लोकप्रिय लाइब्रेरी।
शुद्ध JavaScript: मिलीसेकंड के साथ काम करना
\nसबसे आसान तरीका तिथि को Unix टाइमस्टैम्प (1 जनवरी 1970 से मिलीसेकंड) में बदलना और संचालन करना है:
\nfunction addDays(date, days) {\n const result = new Date(date);\n result.setTime(result.getTime() + days * 24 * 60 * 60 * 1000);\n return result;\n}\n\nfunction diffDays(date1, date2) {\n const msDiff = Math.abs(date2.getTime() - date1.getTime());\n return Math.floor(msDiff / (1000 * 60 * 60 * 24));\n}\n\nconst today = new Date('2024-10-01');\nconst future = addDays(today, 30);\nconsole.log(future); // 2024-10-31\nconsole.log(diffDays(today, future)); // 30\nकमी: यह डेलाइट सेविंग टाइम, लीप सेकंड और महीनों की अलग-अलग लंबाई को ध्यान में नहीं रखता।
\n\ndate-fns लाइब्रेरी: कार्यात्मक और हल्का दृष्टिकोण
\ndate-fns एक मॉड्यूलर लाइब्रेरी है, जिसमें प्रत्येक फ़ंक्शन एक अलग मॉड्यूल है। यह बंडल को बड़ा होने से रोकता है:
// इंस्टॉलेशन: npm install date-fns\nconst { addDays, subMonths, differenceInDays, format } = require('date-fns');\nconst { hi } = require('date-fns/locale');\n\nconst startDate = new Date(2024, 0, 15); // 15 जनवरी 2024\n\nconst plusWeek = addDays(startDate, 7);\nconsole.log(format(plusWeek, 'PP', { locale: hi })); // आउटपुट: "22 जनवरी 2024"