जावास्क्रिप्ट (Node.js) में तिथियों के साथ कार्य करना: लोकप्रिय लाइब्रेरीज़ का अवलोकन
वेब डेवलपमेंट में तिथियों और समय के साथ कार्य करना एक सामान्य कार्य है। जावास्क्रिप्ट में अंतर्निहित Date ऑब्जेक्ट में सीमित कार्यक्षमता और एक असुविधाजनक API है। सौभाग्य से, Node.js के लिए कई लाइब्रेरीज़ मौजूद हैं जो तिथियों के पार्सिंग, फ़ॉर्मेटिंग, मैनिपुलेशन और तुलना को सरल बनाती हैं। इस लेख में, हम चार सबसे लोकप्रिय लाइब्रेरीज़ पर विचार करेंगे: Moment.js, Day.js, date-fns और Luxon।
1. Moment.js (प्रसिद्ध लेकिन पुरानी)
Moment.js लंबे समय तक तिथियों के साथ कार्य करने के लिए डी-फैक्टो मानक रही है। यह पार्सिंग, वैलिडेशन, मैनिपुलेशन और फ़ॉर्मेटिंग के लिए एक समृद्ध API प्रदान करती है। हालाँकि, इस परियोजना को आधिकारिक तौर पर पुराना (legacy) घोषित किया गया है - डेवलपर्स आधुनिक विकल्पों का उपयोग करने की सलाह देते हैं। मुख्य नुकसान: बड़ा आकार (~300 KB), म्यूटेटिंग मेथड्स (मूल ऑब्जेक्ट को बदलना) और Tree Shaking के साथ समस्याएँ।
// स्थापना: npm install momentconst moment = require('moment');
// पार्सिंग और फ़ॉर्मेटिंगconst now = moment();console.log(now.format('YYYY-MM-DD HH:mm:ss')); // 2024-01-15 14:30:00
// मैनिपुलेशनconst future = moment().add(7, 'days').startOf('week');console.log(future.format('dddd, MMMM Do YYYY')); // Monday, January 22nd 2024
// तिथियों के बीच अंतरconst a = moment('2024-01-01');const b = moment('2024-01-10');console.log(b.diff(a, 'days')); // 92. Day.js (हल्का उत्तराधिकारी)
Day.js - Moment.js के समान API वाली एक आधुनिक लाइब्रेरी है, लेकिन इसका आकार केवल 2 KB है। यह पूरी तरह से इम्यूटेबल (मूल ऑब्जेक्ट को नहीं बदलती) है, प्लगइन्स का समर्थन करती है और Tree Shaking के साथ बढ़िया काम करती है। यह उन परियोजनाओं के लिए आदर्श है जहाँ बंडल का आकार महत्वपूर्ण है।
// स्थापना: npm install dayjsconst dayjs = require('dayjs');const relativeTime = require('dayjs/plugin/relativeTime');dayjs.extend(relativeTime);
const now = dayjs();console.log(now.format('DD.MM.YYYY')); // 15.01.2024
// समय क्षेत्रों के साथ कार्य (प्लगइन utc की आवश्यकता है)const utc = require('dayjs/plugin/utc');dayjs.extend(utc);const date = dayjs.utc('2024-01-15T12:00:00Z').local();console.log(date.format('HH:mm')); // 15:00 (समय क्षेत्र पर निर्भर करता है)
// सापेक्ष समयconsole.log(dayjs('2023-12-25').fromNow()); // 3 weeks ago3. date-fns (कार्यात्मक दृष्टिकोण)
date-fns - कार्यात्मक प्रोग्रामिंग के सिद्धांतों पर बनी एक लाइब्रेरी है। एक एकल ऑब्जेक्ट के बजाय, यह कई शुद्ध फ़ंक्शन प्रदान करती है। प्रत्येक फ़ंक्शन को अलग-अलग इम्पोर्ट किया जाता है, जिससे केवल आवश्यक कोड ही एकत्र किया जा सकता है। यह सूचीबद्ध लाइब्रेरीज़ में सबसे अधिक प्रदर्शनशील और मॉड्यूलर है।
// स्थापना: npm install date-fnsconst { format, addDays, differenceInDays, startOfWeek } = require('date-fns');const { ru } = require('date-fns/locale');
const now = new Date();
// स्थानीयकरण के साथ फ़ॉर्मेटिंगconsole.log(format(now, 'PPPP', { locale: ru })); // понедельник, 15 января 2024 г.
// मैनिपुलेशन (शुद्ध फ़ंक्शन)const nextWeek = addDays(now, 7);console.log(format(nextWeek, 'yyyy-MM-dd')); // 2024-01-22
// अंतरconst start = new Date(2024, 0, 1);console.log(differenceInDays(now, start)); // 14
// सप्ताह की शुरुआतconst monday = startOfWeek(now, { weekStartsOn: 1 });console.log(format(monday, 'dd.MM.yyyy')); // 15.01.20244. Luxon (Moment.js के निर्माताओं से आधुनिक मानक)
Luxon - Moment.js के समान डेवलपर्स द्वारा बनाई गई लाइब्रेरी है, लेकिन इसकी कमियों से रहित है। यह मूल DateTime, Duration और Interval ऑब्जेक्ट का उपयोग करती है, पूरी तरह से इम्यूटेबल है, और "बॉक्स से बाहर" समय क्षेत्रों और अंतर्राष्ट्रीयकरण का समर्थन करती है। नई परियोजनाओं के लिए अनुशंसित।
// स्थापना: npm install luxonconst { DateTime, Duration, Inte