TypeScript में डेट और टाइम के साथ एडवांस्ड काम: तरीके और उदाहरण

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

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

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

TypeScript में डेट और टाइम के साथ एडवांस्ड काम: टाइपिंग से लेकर जटिल ऑपरेशन तक

\n\n

डेट और टाइम के साथ काम करना वेब डेवलपमेंट में सबसे आम और साथ ही सबसे मुश्किल कामों में से एक है। एडवांस्ड लेवल पर, सिर्फ new Date() का इस्तेमाल करना काफी नहीं है। TypeScript एक शक्तिशाली टाइप सिस्टम प्रदान करता है, और आधुनिक लाइब्रेरीज़ (Luxon, Date-fns) आपको सुरक्षित, अनुमानित और परफॉरमेंट कोड लिखने में मदद करती हैं। इस आर्टिकल में हम एडवांस्ड तकनीकों को समझेंगे: सख्त टाइपिंग, टाइम ज़ोन के साथ काम, जटिल फ़ॉर्मेटिंग और पार्सिंग, और अपनी खुद की यूटिलिटीज़ बनाना।

\n\n

1. डेट की सख्त टाइपिंग: कस्टम टाइप और Branded Types

\n\n

TypeScript में Date टाइप गलत वैल्यू पास होने से नहीं बचाता। उदाहरण के लिए, एक फंक्शन जो जन्मतिथि की उम्मीद करता है, उसे करंट टाइमस्टैम्प मिल सकता है। इसका समाधान Branded Types या Nominal Typing का उपयोग करना है।

\n\n
// जन्मतिथि के लिए Branded Type\ntype BirthDate = Date & { __brand: 'BirthDate' };\n\nfunction createBirthDate(date: Date): BirthDate {\n  // वैलिडेशन: तारीख भविष्य की नहीं होनी चाहिए\n  if (date.getTime() > Date.now()) {\n    throw new Error('जन्मतिथि भविष्य की नहीं हो सकती');\n  }\n  return date as BirthDate;\n}\n\nfunction calculateAge(birthDate: BirthDate): number {\n  const diff = Date.now() - birthDate.getTime();\n  return Math.floor(diff / (1000 * 60 * 60 * 24 * 365.25));\n}\n\n// उपयोग\nconst rawDate = new Date('1990-05-15');\nconst birth = createBirthDate(rawDate);\nconsole.log(calculateAge(birth)); // OK\n\n// त्रुटि: Argument of type 'Date' is not assignable to parameter of type 'BirthDate'\n// console.log(calculateAge(new Date())); \n
\n\n

यह तरीका सुनिश्चित करता है कि calculateAge फंक्शन में केवल वैलिडेटेड जन्मतिथि ही पहुंचे। अधिक जटिल परिदृश्यों के लिए, आप टाइमस्टैम्प (UnixTimestamp), इंटरवल (TimeInterval) आदि के लिए टाइप बना सकते हैं।

\n\n

2. Intl.DateTimeFormat के साथ एडवांस्ड फ़ॉर्मेटिंग और पार्सिंग

\n\n

बिल्ट-इन Intl.DateTimeFormat ऑब्जेक्ट आपको बिना किसी थर्ड-पार्टी लाइब्रेरी के डेट को फ्लेक्सिबल तरीके से फ़ॉर्मेट करने देता है। एडवांस्ड लेवल पर, हम रीयूज़ेबल फ़ॉर्मेटर बना सकते हैं और जटिल लोकेल को हैंडल कर सकते हैं।

\n\n
// ऑप्शन के साथ फ़ॉर्मेटर बनाना\nconst formatter = new Intl.DateTimeFormat('hi-IN', {\n  year: 'numeric',\n  month: 'long',\n  day: 'numeric',\n  weekday: 'long',\n  hour: '2-digit',\n  minute: '2-digit',\n  timeZone: 'Asia/Kolkata',\n});\n\n// फ़ॉर्मेटिंग\nconsole.log(formatter.format(new Date())); \n// "शुक्रवार, 25 अक्टूबर 2024, 02:30 pm"\n\n// पार्सिंग (कस्टम यूटिलिटी)\nfunction parseLocalizedDate(dateStr: string, locale: string): Date | null {\n  const parts = dateStr.match(/(\\d{4})-(\\d{2})-(\\d{2})/);\n  if (!parts) return null;\n  \n  const [, year, month, day] = parts;\n  return new Date(parseInt(year), parseInt(month) - 1, parseInt(day));\n}\n
\n\n

सुझाव: परफॉरमेंस के लिए, फ़ॉर्मेटर को एक बार बनाएं और उन्हें दोबारा इस्तेमाल करें। हर कॉल पर नया इंस्टेंस बनाने से बचें।

\n\n

3. टाइम ज़ोन के साथ काम और Luxon लाइब्रेरी

\n\n

बिल्ट-इन Date टाइम ज़ोन को अच्छी तरह से हैंडल नहीं करता। Luxon Moment.js के क्रिएटर की एक आधुनिक लाइब्रेरी है, जो TypeScript के साथ पूरी तरह से इंटीग्रेट होती है।

\n\n
import { DateTime, Settings } from 'luxon';\n\n// डिफ़ॉल्ट टाइम ज़ोन सेट करना\nSettings.defaultZone = 'Asia/Kolkata';\n\n// स्पष्ट ज़ोन के साथ डेट बनाना\nconst meeting = DateTime.fromISO('2024-11-01T15:00:00', { zone: 'America/New_York' });\nconsole.log(meeting.toISO()); // 2024-11-01T15:00:00.000-04:00\n\n// दूसरे ज़ोन में कन्वर्ट करना\nconst indiaTime = meeting.setZone('Asia/Kolkata');\nconsole.log(indiaTime.toFormat('dd.MM.yyyy HH:mm')); // 02.11.2024 00:30\n\n// इंटरवल के साथ काम\nconst start = DateTi                

ब्लॉग

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