परिचय: समय एक दर्द क्यों है
\n\nहर कोई जिसने कभी JavaScript में कोड लिखा है, इस दर्द का सामना किया है। आप उपयोगकर्ता को समय 12:00 दिखाते हैं, और वह लिखता है: "मेरे पास 14:00 है, सब कुछ टूट गया है।" या आप डेटाबेस में एक तारीख सहेजते हैं, और लोड करने पर वह एक घंटा पीछे चली जाती है। परिचित लगता है?
\n\nजावास्क्रिप्ट में समय क्षेत्रों के साथ काम करना वह विषय है जिसे कई डेवलपर्स "बाद के लिए" टाल देते हैं। और यह गलत है। क्योंकि अगर आप इसे तुरंत नहीं समझते हैं, तो बाद में आपको आधा एप्लिकेशन फिर से लिखना पड़ेगा।
\n\nइस लेख में, मैं बताऊंगा कि JS में टाइमज़ोन के साथ सही तरीके से कैसे काम करें, वास्तविक कोड उदाहरण दिखाऊंगा और कुछ लाइफहैक्स दूंगा जो आपको डीबगिंग के घंटे बचाएंगे। चलिए शुरू करते हैं!
\n\nJavaScript तिथियों के साथ इतना अजीब व्यवहार क्यों करता है?
\n\nमुख्य बात से शुरू करते हैं: JavaScript में Date ऑब्जेक्ट, इसे हल्के शब्दों में कहें तो, कोई उपहार नहीं है। यह 1 जनवरी 1970 UTC से मिलीसेकंड में समय संग्रहीत करता है। और सब कुछ ठीक होता, लेकिन:
- \n
getMonth()0 से 11 तक महीने लौटाता है (जनवरी 0 है, दिसंबर 11 है) \n getHours(),getMinutes()विधियाँ उपयोगकर्ता के स्थानीय समय क्षेत्र में समय लौटाती हैं \n - और
getUTCHours(),getUTCMinutes()विधियाँ UTC में समय लौटाती हैं \n
और यहीं से भ्रम शुरू होता है। मान लीजिए, आप लिखते हैं:
\n\nconst now = new Date();\nconsole.log(now.getHours()); // 14 — यदि आप MSK में हैं\nconsole.log(now.getUTCHours()); // 11 — UTC\n\nयदि आप now को डेटाबेस में सहेजते हैं, और फिर इसे किसी अन्य टाइमज़ोन में सर्वर पर प्राप्त करते हैं, तो आपको गड़बड़ी मिलेगी। इसलिए जावास्क्रिप्ट में तिथियों और समय क्षेत्रों के साथ काम करने का पहला नियम — हमेशा समय को UTC में संग्रहीत करें, और क्लाइंट पर रूपांतरित करें।
Intl.DateTimeFormat: अंतर्निहित उद्धारकर्ता
\n\nबहुत से लोग नहीं जानते, लेकिन आधुनिक JavaScript में टाइमज़ोन के साथ तिथियों को फ़ॉर्मेट करने के लिए एक शक्तिशाली अंतर्निहित API है। यह Intl.DateTimeFormat है। यह सभी प्रमुख समय क्षेत्रों का समर्थन करता है और तिथियों को खूबसूरती से फ़ॉर्मेट कर सकता है।
मूल उदाहरण
\n\nconst date = new Date('2025-03-15T12:00:00Z');\n\nconst formatter = new Intl.DateTimeFormat('hi-IN', {\n timeZone: 'America/New_York',\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n hour: '2-digit',\n minute: '2-digit'\n});\n\nconsole.log(formatter.format(date)); \n// "15 मार्च 2025, 08:00" — न्यूयॉर्क में समय\n\nध्यान दें: हम तिथि को UTC में पास कर रहे हैं (अंत में अक्षर Z), और Intl.DateTimeFormat स्वचालित रूप से इसे वांछित टाइमज़ोन में रूपांतरित करता है। यह विभिन्न क्षेत्रों के उपयोगकर्ताओं को समय प्रदर्शित करने के लिए आदर्श है।
सभी टाइमज़ोन की सूची
\n\nयदि आप नहीं जानते कि कौन सा टाइमज़ोन निर्दिष्ट करना है, तो आप पूरी सूची प्राप्त कर सकते हैं:
\n\nconsole.log(Intl.supportedValuesOf('timeZone'));\n// ["Africa/Abidjan", "Africa/Accra", ..., "Pacific/Wallis"]\n\nइस सूची में 500 से अधिक टाइमज़ोन शामिल हैं। यह सुनिश्चित करने के लिए इसका उपयोग करें कि आपका टाइमज़ोन समर्थित है।
\n\nMoment.js: क्लासिक, लेकिन आपत्तियों के साथ
\n\nलंबे समय तक, moment.js JavaScript में तिथियों के साथ काम करने का मानक था। यह पार्स, फ़ॉर्मेट, तिथियों में हेरफेर कर सकता है और निश्चित रूप से, moment-timezone प्लगइन के माध्यम से समय क्षेत्रों के साथ काम कर सकता है।
स्थापना
\n\nnpm install moment moment-timezone\n\nटाइमज़ोन के साथ उदाहरण
\n\nconst moment = require('moment-timezone');\n\nconst now = moment();\nconsole.log(now.tz('Europe/Moscow').format('YYYY-MM-DD HH:mm'));\n// 2025-03-15 14:00 — मास्को समय\n\nconst nyTime = moment.tz('2025-03-15 12:00', 'America/New_York');\nconsole.log(nyTime.clone().tz('Europe/Moscow').format('YYYY-MM-DD HH:mm'));\n// 2025-03-15 19:00 — 7 घंटे का अंतर\n\nमहत्वपूर्ण: moment.js एक लीगेसी लाइब्रेरी है। लेखक स्वयं स्थानांतरित करने की सलाह देते हैं