परिचय: जावास्क्रिप्ट में दिनांक के साथ कार्य करना डेवलपर के लिए एक चुनौती क्यों है
दिनांक और समय के साथ कार्य करना वेब डेवलपमेंट में सबसे सामान्य और साथ ही सबसे कपटी कार्यों में से एक है। ऐसा लगता है कि वर्तमान दिनांक प्राप्त करने या दो घटनाओं के बीच अंतर की गणना करने से आसान क्या हो सकता है? हालांकि, व्यवहार में JavaScript (Node.js) पर डेवलपर्स को कई खतरों का सामना करना पड़ता है: समय क्षेत्र, ISO प्रारूप, getMonth() विधि का अस्पष्ट व्यवहार और पुरानी लाइब्रेरीज़। इस लेख में, हम बुनियादी सिद्धांतों से लेकर उन्नत तकनीकों तक, केवल मानक Date ऑब्जेक्ट और आधुनिक date-fns लाइब्रेरी का उपयोग करके दिनांक के साथ कार्य को समझेंगे।
1. Node.js में Date ऑब्जेक्ट की मूल बातें
अंतर्निहित Date ऑब्जेक्ट समय के साथ कार्य करने की नींव है। यह 1 जनवरी 1970 (Unix युग) से बीत चुके मिलीसेकंड की संख्या को संग्रहीत करता है। आइए बुनियादी संचालन देखें।
वर्तमान समय बनाना और प्राप्त करना
दिनांक ऑब्जेक्ट बनाने का सबसे सरल तरीका बिना किसी तर्क के new Date() को कॉल करना है। यह सर्वर पर वर्तमान दिनांक और समय लौटाएगा।
// वर्तमान दिनांक और समय (सर्वर के समय क्षेत्र में)
const now = new Date();
console.log(now); // उदाहरण: 2024-05-20T14:30:00.000Z
// ISO स्ट्रिंग से निर्माण
const specificDate = new Date('2024-12-25T10:00:00');
console.log(specificDate); // 2024-12-25T10:00:00.000Z
// घटकों से निर्माण (वर्ष, महीना, दिन, घंटे, मिनट, सेकंड)
const birthday = new Date(1990, 5, 15); // ध्यान दें: महीना 5 = जून!
console.log(birthday); // 1990-06-15T00:00:00.000Z
महत्वपूर्ण नोट: जावास्क्रिप्ट में महीनों की गिनती 0 से शुरू होती है (जनवरी — 0, दिसंबर — 11)। यह बग का एक सामान्य कारण है।
दिनांक के घटक प्राप्त करने की विधियाँ
दिनांक के अलग-अलग भागों को निकालने के लिए गेटर्स का उपयोग किया जाता है। याद रखें कि वे सर्वर के स्थानीय समय क्षेत्र में मान लौटाते हैं।
const date = new Date('2024-03-15T12:30:45');
console.log(date.getFullYear()); // 2024
console.log(date.getMonth()); // 2 (मार्च, क्योंकि गिनती 0 से शुरू होती है)
console.log(date.getDate()); // 15
console.log(date.getDay()); // 5 (शुक्रवार, 0 - रविवार)
console.log(date.getHours()); // 12
console.log(date.getMinutes()); // 30
console.log(date.getSeconds()); // 45
UTC (समन्वित सार्वत्रिक समय) में काम करने के लिए, getUTC... उपसर्ग वाली विधियों का उपयोग करें, जैसे getUTCHours()।
2. दिनांकों का फ़ॉर्मेटिंग और आउटपुट
Node.js में मनमाने स्ट्रिंग प्रारूप (जैसे "15 मार्च 2024") में दिनांकों को फ़ॉर्मेट करने की कोई अंतर्निहित सुविधा नहीं है। इसके लिए दो रास्ते हैं: मैन्युअल रूप से स्ट्रिंग बनाना या लाइब्रेरीज़ का उपयोग करना।
मैन्युअल फ़ॉर्मेटिंग (तृतीय-पक्ष लाइब्रेरी के बिना)
यदि आपको एक सरल प्रारूप में दिनांक आउटपुट करने की आवश्यकता है, तो आप एक छोटा फ़ंक्शन लिख सकते हैं।
function formatDate(date) {
const day = String(date.getDate()).padStart(2, '0');
const month = String(date.getMonth() + 1).padStart(2, '0');
const year = date.getFullYear();
return `${day}.${month}.${year}`;
}
const today = new Date();
console.log(formatDate(today)); // उदाहरण: "20.05.2024"
आधुनिक समाधान: date-fns लाइब्रेरी
date-fns लाइब्रेरी पुराने moment.js का एक आधुनिक, मॉड्यूलर और हल्का विकल्प है। यह Node.js के लिए एकदम सही है।
// स्थापना: npm install date-fns
const { format, addDays, differenceInDays } = require('date-fns');
const { ru } = require('date-fns/locale'); // स्थानीयकरण
const date = new Date();
// स्थानीयकरण के साथ फ़ॉर्मेटिंग
console.log(format(date, 'dd MMMM yyyy', { locale: ru }));
// उदाहरण: "20 мая 2024"
// दिन जोड़ना
const nextWeek = addDays(date, 7);
console.log(format(nextWeek, 'yyyy-MM-dd')); // "2024-05-27"
// दिनों में अंतर
const start = new Date(2024, 0, 1);
const end = new Date(2024, 11, 31);