TypeScript में टाइमज़ोन: डेट से निपटने की आसान गाइड

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

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

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

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

\n\n

क्या आपने कभी ऐसा बग पकड़ा है जब व्लादिवोस्तोक का यूज़र कल की तारीख देखता है, जबकि कैलेंडर पर आज है? या जब AWS us-east-1 का सर्वर वह समय भेजता है जिसे कलिनिनग्राद का आपका क्लाइंट रात के 3 बजे समझता है? TypeScript में टाइमज़ोन की दुनिया में आपका स्वागत है।

\n\n

समस्या यह है कि JavaScript (और TypeScript इसका विस्तार) मूल रूप से ब्राउज़रों के लिए डिज़ाइन किया गया था। बिल्ट-इन Date ऑब्जेक्ट असल में UTC में एक छिपा हुआ टाइमस्टैम्प है। यह हमारी ज़रूरत के अनुसार टाइमज़ोन के साथ काम नहीं कर सकता। और अगर आप TypeScript में कोई गंभीर एप्लिकेशन लिख रहे हैं — चाहे वह React का एडमिन पैनल हो, Node.js का बैकएंड हो या React Native का मोबाइल ऐप — टाइमज़ोन के साथ सही तरीके से काम किए बिना काम नहीं चलेगा।

\n\n

इस लेख में मैं आपको दिखाऊंगा कि समय को कैसे काबू में किया जाए। हम बेसिक कॉन्सेप्ट को समझेंगे, आधुनिक लाइब्रेरी का उपयोग करना सीखेंगे और सामान्य गलतियों से बचेंगे। चलिए शुरू करते हैं!

\n\n

कोड लिखने से पहले टाइमज़ोन के बारे में क्या जानना चाहिए

\n\n

TypeScript में गोता लगाने से पहले, बातों को स्पष्ट कर लेते हैं। दुनिया में दो प्रकार का समय होता है: निरपेक्ष (UTC) और स्थानीय (जो यूज़र देखता है)।

\n\n
    \n
  • UTC (Coordinated Universal Time) — यह मानक है। सर्वर, डेटाबेस और API को समय UTC में ही स्टोर करना चाहिए। यह एक पक्का नियम है।
  • \n
  • IANA Time Zone Database — यह टाइमज़ोन का शब्दकोश है जैसे Asia/Kolkata, America/New_York। कोड में MSK या PST जैसे संक्षिप्त नामों के बजाय इन्हीं स्ट्रिंग का उपयोग करें।
  • \n
  • Offset (अंतर) — यह UTC से अंतर है, जैसे +05:30। लेकिन याद रखें: DST (डेलाइट सेविंग टाइम) के कारण ऑफसेट बदल सकता है। इसलिए IANA ज़ोन के बजाय ऑफसेट स्टोर करना एक बुरा विचार है।
  • \n
\n\n
\n

सुनहरा नियम: UTC में स्टोर करें, क्लाइंट पर कन्वर्ट करें, ज़ोन की पहचान के लिए IANA स्ट्रिंग का उपयोग करें।

\n
\n\n

नेटिव Date अपर्याप्त क्यों है: दर्द और परेशानी

\n\n

आइए सच्चाई का सामना करें: TypeScript में new Date() एक ऐसे स्विस चाकू की तरह है जिसका ब्लेड टूटा हुआ है। यह केवल टाइमस्टैम्प स्टोर कर सकता है और इसे ब्राउज़र या सर्वर के स्थानीय समय में दिखा सकता है। कुछ जटिल करने की कोशिश करें:

\n\n
// बुरा उदाहरण: नेटिव तरीकों से ज़ोन के साथ काम करने की कोशिश\nconst date = new Date('2024-03-10T12:00:00');\nconsole.log(date.toLocaleString('hi-IN', { timeZone: 'Asia/Kolkata' }));\n// आउटपुट: "10/3/2024, 5:30:00 pm" — लेकिन यह सिर्फ एक स्ट्रिंग है, ऑब्जेक्ट नहीं!\n\n// और अगर दूसरे ज़ोन में Date चाहिए?\n// उफ़... नेटिव JS ज़ोन के साथ Date नहीं बना सकता।\n
\n\n

समस्या यह है कि Date हमेशा UTC में समय स्टोर करता है। getHours() जैसे सभी मेथड केवल UTC को ब्राउज़र के स्थानीय समय में बदलते हैं। आप एक ऐसा Date ऑब्जेक्ट नहीं प्राप्त कर सकते जो "सोचता" हो कि वह न्यूयॉर्क में है।

\n\n

यही कारण है कि हम लाइब्रेरी का उपयोग करते हैं। TypeScript इकोसिस्टम में दो मुख्य उम्मीदवार हैं: Luxon और date-fns-tz।

\n\n

Luxon: डेट के साथ काम करने के लिए भारी तोपखाना

\n\n

Luxon एक आधुनिक लाइब्रेरी है जो Moment.js (जो अब deprecated है) के निर्माता द्वारा बनाई गई है। इसे नए सिरे से लिखा गया है, यह नेटिव Intl.DateTimeFormat का उपयोग करती है और TypeScript के लिए पूरी तरह से टाइप की गई है।

\n\n

Luxon इंस्टॉल करना

\n\n
npm install luxon\nnpm install --save-dev @types/luxon\n
\n\n

किसी विशिष्ट टाइमज़ोन में डेट बनाना

\n\n
import { DateTime } from 'luxon';\n\n// Asia/Kolkata ज़ोन में डेट बनाएँ\nconst indiaTime = DateTime.fromObject(\n  { year: 2024, month: 3, day: 10, hour: 12 },\n  { zone: 'Asia/Kolkata' }\n);\nconsole.log(indiaTime.toISO());\n// आउटपुट: "2024-03-10T12:00:00.000+05:30"\n\n// दूसरे ज़ोन में कन्वर्ट करें\nconst nyTime = indiaTime.setZone('America/New_York');\nconsole.log(nyTime.toISO());\n// आउटपुट: "2024-03-10T02:30:00.00                

ब्लॉग

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