हिन्दी

जावास्क्रिप्ट के टेम्परल API का उपयोग कर सटीक समय अंतराल गणना के लिए एक गाइड, जिसमें ड्यूरेशन निर्माण, अंकगणित और स्वरूपण शामिल हैं।

जावास्क्रिप्ट टेम्परल ड्यूरेशन: समय अंतराल गणना में महारत हासिल करना

जावास्क्रिप्ट का टेम्परल API तिथियों, समयों और समय अंतरालों को संभालने का एक आधुनिक और शक्तिशाली तरीका प्रस्तुत करता है। Temporal.Duration ऑब्जेक्ट समय की लंबाई का प्रतिनिधित्व करता है, जो समय अंतरालों के साथ गणना करने के लिए एक स्पष्ट और सहज दृष्टिकोण प्रदान करता है। यह लेख Temporal.Duration के विवरण में गहराई से जाता है, यह दर्शाता है कि विभिन्न उपयोग मामलों के लिए ड्यूरेशन कैसे बनाएं, उनमें हेरफेर करें और उन्हें प्रारूपित करें।

टेम्परल.ड्यूरेशन क्या है?

Temporal.Duration समय की एक अवधि का प्रतिनिधित्व करता है, इसे वर्षों, महीनों, दिनों, घंटों, मिनटों, सेकंड और सेकंड के अंशों (मिलीसेकंड, माइक्रोसेकंड, नैनोसेकंड) के संदर्भ में व्यक्त करता है। Date ऑब्जेक्ट्स के विपरीत जो समय में एक विशिष्ट बिंदु का प्रतिनिधित्व करते हैं, Temporal.Duration समय की मात्रा का प्रतिनिधित्व करता है। यह ISO 8601 ड्यूरेशन प्रारूप (जैसे, P1Y2M10DT2H30M 1 वर्ष, 2 महीने, 10 दिन, 2 घंटे और 30 मिनट का प्रतिनिधित्व करता है) का पालन करता है। टेम्परल API को पुराने Date ऑब्जेक्ट की तुलना में अधिक सहज और कम त्रुटि-प्रवण होने के लिए डिज़ाइन किया गया है।

टेम्परल.ड्यूरेशन ऑब्जेक्ट्स बनाना

Temporal.Duration ऑब्जेक्ट बनाने के कई तरीके हैं:

1. एक प्लेन ऑब्जेक्ट से

आप वांछित गुणों के साथ एक ऑब्जेक्ट पास करके एक ड्यूरेशन बना सकते हैं:

const duration = new Temporal.Duration(1, 2, 10, 2, 30, 0, 0, 0);
console.log(duration.toString()); // आउटपुट: P1Y2M10DT2H30M

यह 1 वर्ष, 2 महीने, 10 दिन, 2 घंटे और 30 मिनट की अवधि बनाता है। ध्यान दें कि तर्क निम्नलिखित क्रम के अनुरूप हैं: years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds

2. एक ISO 8601 स्ट्रिंग से

आप Temporal.Duration.from() का उपयोग करके एक ISO 8601 ड्यूरेशन स्ट्रिंग से भी एक ड्यूरेशन बना सकते हैं:

const duration = Temporal.Duration.from("P1Y2M10DT2H30M");
console.log(duration.toString()); // आउटपुट: P1Y2M10DT2H30M

यह विशेष रूप से तब उपयोगी होता है जब स्ट्रिंग प्रारूप में संग्रहीत या किसी बाहरी स्रोत से प्राप्त ड्यूरेशन के साथ काम कर रहे हों।

3. Temporal.Instant, Temporal.ZonedDateTime, आदि के साथ add() और subtract() विधियों का उपयोग करना।

जब आप अन्य टेम्परल प्रकारों (जैसे Temporal.Instant या Temporal.ZonedDateTime) से Temporal.Duration जोड़ते या घटाते हैं, तो एक Temporal.Duration लौटाया जाता है जो समय के दो बिंदुओं के बीच के अंतर का प्रतिनिधित्व करता है यदि आप फिर उन्हें घटाते हैं। उदाहरण के लिए:

const now = Temporal.Now.zonedDateTimeISO();
const later = now.add({ hours: 5 });
const duration = later.since(now);
console.log(duration.toString()); // आउटपुट: PT5H

ड्यूरेशन घटकों तक पहुँचना

आप इसके गुणों का उपयोग करके Temporal.Duration ऑब्जेक्ट के व्यक्तिगत घटकों तक पहुँच सकते हैं:

const duration = Temporal.Duration.from("P1Y2M10DT2H30M");
console.log(duration.years);      // आउटपुट: 1
console.log(duration.months);     // आउटपुट: 2
console.log(duration.days);       // आउटपुट: 10
console.log(duration.hours);      // आउटपुट: 2
console.log(duration.minutes);     // आउटपुट: 30
console.log(duration.seconds);     // आउटपुट: 0
console.log(duration.milliseconds); // आउटपुट: 0
console.log(duration.microseconds); // आउटपुट: 0
console.log(duration.nanoseconds);  // आउटपुट: 0

ड्यूरेशन के साथ अंकगणित करना

Temporal.Duration ऑब्जेक्ट्स add() और subtract() विधियों का उपयोग करके जोड़ और घटाव का समर्थन करते हैं। ये विधियाँ ऑपरेशन के परिणाम का प्रतिनिधित्व करने वाला एक नया Temporal.Duration ऑब्जेक्ट लौटाती हैं।

const duration1 = Temporal.Duration.from("P1Y2M");
const duration2 = Temporal.Duration.from("P3M4D");

const addedDuration = duration1.add(duration2);
console.log(addedDuration.toString()); // आउटपुट: P1Y5M4D

const subtractedDuration = duration1.subtract(duration2);
console.log(subtractedDuration.toString()); // आउटपुट: P10M26D

आप अधिक जटिल गणनाओं के लिए इन विधियों को चेन भी कर सकते हैं:

const duration = Temporal.Duration.from("P1D").add({ hours: 12 }).subtract({ minutes: 30 });
console.log(duration.toString()); // आउटपुट: P1DT11H30M

negated() विधि सभी घटकों को नकारे हुए एक नया Temporal.Duration ऑब्जेक्ट लौटाती है:

const duration = Temporal.Duration.from("P1Y2M10DT2H30M");
const negatedDuration = duration.negated();
console.log(negatedDuration.toString()); // आउटपुट: -P1Y2M10DT2H30M

abs() विधि सभी घटकों को धनात्मक मानों (निरपेक्ष मानों) के रूप में एक नया Temporal.Duration ऑब्जेक्ट लौटाती है:

const duration = Temporal.Duration.from("-P1Y2M10DT2H30M");
const absoluteDuration = duration.abs();
console.log(absoluteDuration.toString()); // आउटपुट: P1Y2M10DT2H30M

with() विधि आपको कुछ, या सभी, गुणों को नए मानों में बदलकर एक नया Temporal.Duration इंस्टेंस बनाने की अनुमति देती है। यदि तर्क ऑब्जेक्ट में कोई मान निर्दिष्ट नहीं है, तो ड्यूरेशन के मूल मान का उपयोग किया जाएगा। उदाहरण के लिए:

const duration = Temporal.Duration.from("P1Y2M10DT2H30M");
const newDuration = duration.with({ years: 2, days: 5 });
console.log(newDuration.toString()); // आउटपुट: P2Y2M5DT2H30M

ड्यूरेशन को सामान्य बनाना

ड्यूरेशन को कभी-कभी एक गैर-सामान्यीकृत रूप में व्यक्त किया जा सकता है (उदाहरण के लिए, P1Y12M, जिसे P2Y तक सरल किया जा सकता है)। normalized() विधि एक ड्यूरेशन को उसके सबसे संक्षिप्त रूप में सरल बनाने का प्रयास करती है। हालाँकि, इसे महीनों की अलग-अलग लंबाई की जटिलताओं को संभालने के लिए एक संदर्भ तिथि की आवश्यकता होती है। ठीक से सामान्य बनाने के लिए, आपको एक Temporal.PlainDate, Temporal.ZonedDateTime, या Temporal.Instant इंस्टेंस की आवश्यकता होगी।

उदाहरण के लिए, महीनों और दिनों से जुड़ी ड्यूरेशन को सामान्य बनाने के लिए एक संदर्भ तिथि की आवश्यकता होती है:

const duration = Temporal.Duration.from("P1M32D");
const referenceDate = Temporal.PlainDate.from("2024-01-01");
const normalizedDuration = duration.normalized({ relativeTo: referenceDate });
console.log(normalizedDuration.toString()); // आउटपुट: P2M1D

इस उदाहरण में, ड्यूरेशन P1M32D को 1 जनवरी, 2024 के सापेक्ष सामान्य किया गया है, जिसके परिणामस्वरूप P2M1D होता है क्योंकि जनवरी में 31 दिन होते हैं।

यदि आप केवल समय घटकों (घंटे, मिनट, सेकंड, आदि) के साथ काम कर रहे हैं, तो आप संदर्भ तिथि के बिना सामान्य कर सकते हैं:

const duration = Temporal.Duration.from("PT25H61M");
const normalizedDuration = duration.normalized({ relativeTo: null }); //या relativeTo तर्क को छोड़ दें
console.log(normalizedDuration.toString()); // आउटपुट: P1DT2H1M

ड्यूरेशन की तुलना करना

आप compare() विधि का उपयोग करके ड्यूरेशन की तुलना कर सकते हैं। यह विधि लौटाती है:

const duration1 = Temporal.Duration.from("P1Y");
const duration2 = Temporal.Duration.from("P6M");

const comparisonResult = Temporal.Duration.compare(duration1, duration2);
console.log(comparisonResult); // आउटपुट: 1

व्यावहारिक उदाहरण

1. किसी घटना तक का समय गणना करना

मान लीजिए कि आप किसी विशिष्ट घटना तक शेष समय की गणना करना चाहते हैं। वर्तमान समय प्राप्त करने के लिए Temporal.Now.zonedDateTimeISO() का उपयोग करें, और घटना की तारीख घटाएं। यदि घटना की तारीख बीत चुकी है, तो आउटपुट नकारात्मक होगा।

const eventDate = Temporal.ZonedDateTime.from({ timeZone: 'America/Los_Angeles', year: 2024, month: 12, day: 25, hour: 9, minute: 0, second: 0 });
const now = Temporal.Now.zonedDateTimeISO('America/Los_Angeles');

const durationUntilEvent = eventDate.since(now);

console.log(durationUntilEvent.toString()); // आउटपुट: उदा., P262DT14H30M (वर्तमान दिनांक और समय के आधार पर)

2. प्रोजेक्ट कार्य अवधियों को ट्रैक करना

परियोजना प्रबंधन में, आप कार्यों की अनुमानित या वास्तविक अवधि को ट्रैक करने के लिए Temporal.Duration का उपयोग कर सकते हैं।

const task1EstimatedDuration = Temporal.Duration.from("PT8H"); // 8 घंटे
const task2EstimatedDuration = Temporal.Duration.from("PT16H"); // 16 घंटे

const totalEstimatedDuration = task1EstimatedDuration.add(task2EstimatedDuration);
console.log(`कुल अनुमानित अवधि: ${totalEstimatedDuration.toString()}`); // आउटपुट: कुल अनुमानित अवधि: P1DT

3. आयु की गणना

हालांकि आयु की सटीक गणना के लिए लीप वर्ष और समय क्षेत्रों पर विचार करने की आवश्यकता होती है, Temporal.Duration एक उचित अनुमान प्रदान कर सकता है:

const birthDate = Temporal.PlainDate.from("1990-05-15");
const currentDate = Temporal.PlainDate.from("2024-01-20");

const ageDuration = currentDate.since(birthDate, { smallestUnit: 'years' });
console.log(`अनुमानित आयु: ${ageDuration.years} वर्ष`); // आउटपुट: अनुमानित आयु: 33 years

4. मानव-पठनीय ड्यूरेशन प्रदर्शित करना

अक्सर, आपको ड्यूरेशन को मानव-पठनीय प्रारूप में प्रदर्शित करने की आवश्यकता होती है। जबकि Temporal.Duration में अंतर्निहित स्वरूपण फ़ंक्शन नहीं होते हैं, आप कस्टम स्वरूपण तर्क बना सकते हैं:

function formatDuration(duration) {
  const parts = [];
  if (duration.years) parts.push(`${duration.years} year${duration.years > 1 ? 's' : ''}`);
  if (duration.months) parts.push(`${duration.months} month${duration.months > 1 ? 's' : ''}`);
  if (duration.days) parts.push(`${duration.days} day${duration.days > 1 ? 's' : ''}`);
  if (duration.hours) parts.push(`${duration.hours} hour${duration.hours > 1 ? 's' : ''}`);
  if (duration.minutes) parts.push(`${duration.minutes} minute${duration.minutes > 1 ? 's' : ''}`);
  if (duration.seconds) parts.push(`${duration.seconds} second${duration.seconds > 1 ? 's' : ''}`);

  return parts.join(', ');
}

const duration = Temporal.Duration.from("P1Y2M10DT2H30M");
const formattedDuration = formatDuration(duration);
console.log(formattedDuration); // आउटपुट: 1 year, 2 months, 10 days, 2 hours, 30 minutes

उन्नत उपयोग और विचार

1. समय क्षेत्र हैंडलिंग

जब समय अंतरालों से निपटते हैं जो समय क्षेत्र की सीमाओं या डेलाइट सेविंग टाइम संक्रमणों को पार करते हैं, तो सटीक गणना सुनिश्चित करने के लिए Temporal.ZonedDateTime का उपयोग करना महत्वपूर्ण है। Temporal.PlainDate और Temporal.PlainTime का उपयोग करने से किसी भी समय क्षेत्र रूपांतरण से बचा जा सकेगा।

2. सबसे छोटी इकाई और राउंडिंग

`since()` और `until()` विधियाँ अक्सर परिणामी अवधि के लिए सबसे छोटी इकाई को परिभाषित करने के लिए विकल्प स्वीकार करती हैं। उदाहरण के लिए, किसी घटना तक के समय की गणना करना और परिणामों को दिनों तक सीमित करना।

const eventDate = Temporal.PlainDate.from("2024-12-25");
const now = Temporal.PlainDate.from("2024-01-20");

const durationUntilEvent = now.until(eventDate, { smallestUnit: 'days' });

console.log(durationUntilEvent.toString()); //उदाहरण आउटपुट PT340D

3. लीप सेकंड

टेम्परल मूल रूप से लीप सेकंड का हिसाब नहीं रखता है। यदि आपको अत्यधिक सटीकता की आवश्यकता है, तो आपको लीप सेकंड को अलग से संभालना होगा।

4. IANA समय क्षेत्र

टेम्परल API, IANA (इंटरनेट असाइन्ड नंबर्स अथॉरिटी) समय क्षेत्र डेटाबेस पर निर्भर करता है। सुनिश्चित करें कि आपके वातावरण में समय क्षेत्र रूपांतरणों को सटीक रूप से संभालने के लिए IANA डेटाबेस का एक अद्यतित संस्करण है।

सर्वोत्तम प्रथाएं

सामान्य गलतियाँ

विभिन्न संस्कृतियों में वास्तविक दुनिया के उपयोग के मामले

टेम्परल API वैश्विक अनुप्रयोगों में विशेष रूप से फायदेमंद हो सकता है जहां समय क्षेत्र के अंतर और सांस्कृतिक बारीकियां महत्वपूर्ण हैं। यहाँ कुछ उदाहरण हैं:

निष्कर्ष

Temporal.Duration जावास्क्रिप्ट में समय अंतरालों के साथ काम करने का एक मजबूत और सहज तरीका प्रदान करता है। इसकी विशेषताओं और सर्वोत्तम प्रथाओं को समझकर, आप अपने अनुप्रयोगों में आत्मविश्वास से सटीक और विश्वसनीय ड्यूरेशन गणना कर सकते हैं। टेम्परल API को अपनाने से स्वच्छ, अधिक रखरखाव योग्य कोड बनता है और पुराने दिनांक और समय प्रबंधन से जुड़ी त्रुटियों का जोखिम कम होता है।

जैसे-जैसे आप टेम्परल API में गहराई से उतरते हैं, आधिकारिक दस्तावेज़ीकरण से परामर्श करना याद रखें और इसकी क्षमताओं को पूरी तरह से समझने के लिए विभिन्न परिदृश्यों के साथ प्रयोग करें। अपने आधुनिक डिजाइन और व्यापक विशेषताओं के साथ, टेम्परल जावास्क्रिप्ट में हमारे द्वारा तिथियों, समयों और ड्यूरेशन को संभालने के तरीके में क्रांति लाने के लिए तैयार है।