जावास्क्रिप्ट में समय क्षेत्र: पागल कैसे न हों

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

परिचय: समय एक दर्द क्यों है

\n\n

हर कोई जिसने कभी JavaScript में कोड लिखा है, इस दर्द का सामना किया है। आप उपयोगकर्ता को समय 12:00 दिखाते हैं, और वह लिखता है: "मेरे पास 14:00 है, सब कुछ टूट गया है।" या आप डेटाबेस में एक तारीख सहेजते हैं, और लोड करने पर वह एक घंटा पीछे चली जाती है। परिचित लगता है?

\n\n

जावास्क्रिप्ट में समय क्षेत्रों के साथ काम करना वह विषय है जिसे कई डेवलपर्स "बाद के लिए" टाल देते हैं। और यह गलत है। क्योंकि अगर आप इसे तुरंत नहीं समझते हैं, तो बाद में आपको आधा एप्लिकेशन फिर से लिखना पड़ेगा।

\n\n

इस लेख में, मैं बताऊंगा कि JS में टाइमज़ोन के साथ सही तरीके से कैसे काम करें, वास्तविक कोड उदाहरण दिखाऊंगा और कुछ लाइफहैक्स दूंगा जो आपको डीबगिंग के घंटे बचाएंगे। चलिए शुरू करते हैं!

\n\n

JavaScript तिथियों के साथ इतना अजीब व्यवहार क्यों करता है?

\n\n

मुख्य बात से शुरू करते हैं: JavaScript में Date ऑब्जेक्ट, इसे हल्के शब्दों में कहें तो, कोई उपहार नहीं है। यह 1 जनवरी 1970 UTC से मिलीसेकंड में समय संग्रहीत करता है। और सब कुछ ठीक होता, लेकिन:

\n\n
    \n
  • getMonth() 0 से 11 तक महीने लौटाता है (जनवरी 0 है, दिसंबर 11 है)
  • \n
  • getHours(), getMinutes() विधियाँ उपयोगकर्ता के स्थानीय समय क्षेत्र में समय लौटाती हैं
  • \n
  • और getUTCHours(), getUTCMinutes() विधियाँ UTC में समय लौटाती हैं
  • \n
\n\n

और यहीं से भ्रम शुरू होता है। मान लीजिए, आप लिखते हैं:

\n\n
const now = new Date();\nconsole.log(now.getHours());      // 14 — यदि आप MSK में हैं\nconsole.log(now.getUTCHours());   // 11 — UTC
\n\n

यदि आप now को डेटाबेस में सहेजते हैं, और फिर इसे किसी अन्य टाइमज़ोन में सर्वर पर प्राप्त करते हैं, तो आपको गड़बड़ी मिलेगी। इसलिए जावास्क्रिप्ट में तिथियों और समय क्षेत्रों के साथ काम करने का पहला नियम — हमेशा समय को UTC में संग्रहीत करें, और क्लाइंट पर रूपांतरित करें।

\n\n

Intl.DateTimeFormat: अंतर्निहित उद्धारकर्ता

\n\n

बहुत से लोग नहीं जानते, लेकिन आधुनिक JavaScript में टाइमज़ोन के साथ तिथियों को फ़ॉर्मेट करने के लिए एक शक्तिशाली अंतर्निहित API है। यह Intl.DateTimeFormat है। यह सभी प्रमुख समय क्षेत्रों का समर्थन करता है और तिथियों को खूबसूरती से फ़ॉर्मेट कर सकता है।

\n\n

मूल उदाहरण

\n\n
const 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\n

यदि आप नहीं जानते कि कौन सा टाइमज़ोन निर्दिष्ट करना है, तो आप पूरी सूची प्राप्त कर सकते हैं:

\n\n
console.log(Intl.supportedValuesOf('timeZone'));\n// ["Africa/Abidjan", "Africa/Accra", ..., "Pacific/Wallis"]
\n\n

इस सूची में 500 से अधिक टाइमज़ोन शामिल हैं। यह सुनिश्चित करने के लिए इसका उपयोग करें कि आपका टाइमज़ोन समर्थित है।

\n\n

Moment.js: क्लासिक, लेकिन आपत्तियों के साथ

\n\n

लंबे समय तक, moment.js JavaScript में तिथियों के साथ काम करने का मानक था। यह पार्स, फ़ॉर्मेट, तिथियों में हेरफेर कर सकता है और निश्चित रूप से, moment-timezone प्लगइन के माध्यम से समय क्षेत्रों के साथ काम कर सकता है।

\n\n

स्थापना

\n\n
npm install moment moment-timezone
\n\n

टाइमज़ोन के साथ उदाहरण

\n\n
const 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 एक लीगेसी लाइब्रेरी है। लेखक स्वयं स्थानांतरित करने की सलाह देते हैं

ब्लॉग

पुस्तक अनुशंसाएँ