मराठी

जावास्क्रिप्टच्या टेंपोरल API चा वापर करून अचूक आणि सोप्या वेळेच्या अंतराची गणना करण्यासाठी एक सर्वसमावेशक मार्गदर्शक, ज्यात ड्यूरेशन तयार करण्यापासून ते प्रगत गणित आणि फॉरमॅटिंगपर्यंत सर्व काही समाविष्ट आहे.

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

जावास्क्रिप्टचा टेंपोरल API तारखा, वेळा आणि वेळेचे अंतर हाताळण्यासाठी एक आधुनिक आणि शक्तिशाली मार्ग सादर करतो. Temporal.Duration ऑब्जेक्ट वेळेचा कालावधी दर्शवतो, जो वेळेच्या अंतरासह गणना करण्यासाठी एक स्पष्ट आणि सोपा दृष्टिकोन प्रदान करतो. हा लेख Temporal.Duration च्या तपशिलांचा आढावा घेतो आणि विविध वापरांसाठी ड्यूरेशन्स कसे तयार करावे, त्यात बदल कसे करावे आणि स्वरूपन कसे करावे हे दाखवतो.

टेंपोरल.ड्यूरेशन (Temporal.Duration) म्हणजे काय?

Temporal.Duration वेळेचा एक कालावधी दर्शवतो, जो वर्षे, महिने, दिवस, तास, मिनिटे, सेकंद आणि सेकंदाचे अंश (मिलिसेकंद, मायक्रोसेकंद, नॅनोसेकंद) मध्ये व्यक्त करतो. Date ऑब्जेक्ट्स जे वेळेतील एक विशिष्ट बिंदू दर्शवतात, त्यांच्या विपरीत Temporal.Duration वेळेचे प्रमाण दर्शवतो. हे ISO 8601 ड्यूरेशन फॉरमॅटचे पालन करते (उदा. P1Y2M10DT2H30M म्हणजे १ वर्ष, २ महिने, १० दिवस, २ तास आणि ३० मिनिटे). टेंपोरल API जुन्या Date ऑब्जेक्टपेक्षा अधिक सोपे आणि कमी त्रुटी-प्रवण होण्यासाठी डिझाइन केलेले आहे.

टेंपोरल.ड्यूरेशन ऑब्जेक्ट्स तयार करणे

Temporal.Duration ऑब्जेक्ट्स तयार करण्याचे अनेक मार्ग आहेत:

१. प्लेन ऑब्जेक्टमधून

तुम्ही इच्छित गुणधर्मांसह एक ऑब्जेक्ट पास करून ड्यूरेशन तयार करू शकता:

const duration = new Temporal.Duration(1, 2, 10, 2, 30, 0, 0, 0);
console.log(duration.toString()); // Output: P1Y2M10DT2H30M

हे १ वर्ष, २ महिने, १० दिवस, २ तास आणि ३० मिनिटांचा कालावधी तयार करते. लक्षात घ्या की आर्ग्युमेंट्स खालील क्रमाने येतात: years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds.

२. ISO 8601 स्ट्रिंगमधून

तुम्ही Temporal.Duration.from() वापरून ISO 8601 ड्यूरेशन स्ट्रिंगमधून ड्यूरेशन तयार करू शकता:

const duration = Temporal.Duration.from("P1Y2M10DT2H30M");
console.log(duration.toString()); // Output: P1Y2M10DT2H30M

स्ट्रिंग फॉरमॅटमध्ये संग्रहित ड्यूरेशन्स किंवा बाह्य स्रोताकडून प्राप्त झालेल्या ड्यूरेशन्स हाताळताना हे विशेषतः उपयुक्त आहे.

३. 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()); // Output: PT5H

ड्यूरेशनच्या घटकांमध्ये प्रवेश करणे

तुम्ही Temporal.Duration ऑब्जेक्टच्या वैयक्तिक घटकांमध्ये त्याच्या गुणधर्मांचा वापर करून प्रवेश करू शकता:

const duration = Temporal.Duration.from("P1Y2M10DT2H30M");
console.log(duration.years);      // Output: 1
console.log(duration.months);     // Output: 2
console.log(duration.days);       // Output: 10
console.log(duration.hours);      // Output: 2
console.log(duration.minutes);     // Output: 30
console.log(duration.seconds);     // Output: 0
console.log(duration.milliseconds); // Output: 0
console.log(duration.microseconds); // Output: 0
console.log(duration.nanoseconds);  // Output: 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()); // Output: P1Y5M4D

const subtractedDuration = duration1.subtract(duration2);
console.log(subtractedDuration.toString()); // Output: P10M26D

तुम्ही अधिक जटिल गणनेसाठी या पद्धतींना एकत्र जोडू शकता:

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

negated() पद्धत सर्व घटकांना ऋण करून एक नवीन Temporal.Duration ऑब्जेक्ट परत करते:

const duration = Temporal.Duration.from("P1Y2M10DT2H30M");
const negatedDuration = duration.negated();
console.log(negatedDuration.toString()); // Output: -P1Y2M10DT2H30M

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

const duration = Temporal.Duration.from("-P1Y2M10DT2H30M");
const absoluteDuration = duration.abs();
console.log(absoluteDuration.toString()); // Output: P1Y2M10DT2H30M

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

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

ड्यूरेशन्सचे सामान्यीकरण (Normalizing) करणे

ड्यूरेशन्स कधीकधी अ-सामान्यीकृत स्वरूपात व्यक्त केले जाऊ शकतात (उदा. 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()); // Output: P2M1D

या उदाहरणात, P1M32D ड्यूरेशनला जानेवारी १, २०२४ च्या संदर्भात सामान्य केले आहे, ज्यामुळे P2M1D परिणाम मिळतो कारण जानेवारीत ३१ दिवस असतात.

जर तुम्ही फक्त वेळेच्या घटकांसह (तास, मिनिटे, सेकंद, इत्यादी) काम करत असाल, तर तुम्ही संदर्भ तारखेशिवाय सामान्यीकरण करू शकता:

const duration = Temporal.Duration.from("PT25H61M");
const normalizedDuration = duration.normalized({ relativeTo: null }); //or omit relativeTo argument
console.log(normalizedDuration.toString()); // Output: P1DT2H1M

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

तुम्ही compare() पद्धत वापरून ड्यूरेशन्सची तुलना करू शकता. ही पद्धत परत करते:

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

const comparisonResult = Temporal.Duration.compare(duration1, duration2);
console.log(comparisonResult); // Output: 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()); // Output: e.g., P262DT14H30M (depending on the current date and time)

२. प्रोजेक्टमधील कामांच्या कालावधीचा मागोवा घेणे

प्रकल्प व्यवस्थापनात, तुम्ही कामांच्या अंदाजित किंवा वास्तविक कालावधीचा मागोवा घेण्यासाठी Temporal.Duration वापरू शकता.

const task1EstimatedDuration = Temporal.Duration.from("PT8H"); // 8 hours
const task2EstimatedDuration = Temporal.Duration.from("PT16H"); // 16 hours

const totalEstimatedDuration = task1EstimatedDuration.add(task2EstimatedDuration);
console.log(`Total estimated duration: ${totalEstimatedDuration.toString()}`); // Output: Total estimated duration: P1DT

३. वय मोजणे

वयाची अचूक गणना करण्यासाठी लीप वर्षे आणि टाइम झोन विचारात घेणे आवश्यक असले तरी, 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(`Estimated age: ${ageDuration.years} years`); // Output: Estimated age: 33 years

४. मानवांना वाचता येण्याजोग्या स्वरूपात ड्यूरेशन्स प्रदर्शित करणे

अनेकदा, तुम्हाला ड्यूरेशन्स मानवांना वाचता येण्याजोग्या स्वरूपात प्रदर्शित करण्याची आवश्यकता असते. जरी 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); // Output: 1 year, 2 months, 10 days, 2 hours, 30 minutes

प्रगत वापर आणि विचार करण्यासारख्या गोष्टी

१. टाइम झोन हाताळणी

जेव्हा टाइम झोन सीमा किंवा डेलाइट सेव्हिंग टाइम संक्रमणे ओलांडणाऱ्या वेळेच्या अंतराशी व्यवहार करता, तेव्हा अचूक गणना सुनिश्चित करण्यासाठी Temporal.ZonedDateTime वापरणे महत्त्वाचे आहे. Temporal.PlainDate आणि Temporal.PlainTime वापरल्याने कोणतेही टाइम झोन रूपांतरण टाळले जाईल.

२. सर्वात लहान एकक आणि गोलाकार करणे (Rounding)

`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()); //example output PT340D

३. लीप सेकंद

टेंपोरल मूळतः लीप सेकंदांचा हिशोब देत नाही. जर तुम्हाला अत्यंत अचूकतेची आवश्यकता असेल, तर तुम्हाला लीप सेकंद स्वतंत्रपणे हाताळावे लागतील.

४. IANA टाइम झोन्स

टेंपोरल API IANA (इंटरनेट असाइन्ड नंबर्स अथॉरिटी) टाइम झोन डेटाबेसवर अवलंबून आहे. टाइम झोन रूपांतरणे अचूकपणे हाताळण्यासाठी तुमच्या वातावरणात IANA डेटाबेसची अद्ययावत आवृत्ती असल्याची खात्री करा.

सर्वोत्तम पद्धती

सामान्य चुका

विविध संस्कृतींमधील वास्तविक-जगातील वापर प्रकरणे

टेंपोरल API जागतिक अनुप्रयोगांमध्ये विशेषतः फायदेशीर ठरू शकतो जिथे टाइम झोनमधील फरक आणि सांस्कृतिक बारकावे महत्त्वपूर्ण असतात. येथे काही उदाहरणे आहेत:

निष्कर्ष

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

तुम्ही टेंपोरल API मध्ये अधिक खोलवर जाल तेव्हा, अधिकृत दस्तऐवजीकरण पाहण्याचे लक्षात ठेवा आणि त्याच्या क्षमता पूर्णपणे समजून घेण्यासाठी विविध परिस्थितींसह प्रयोग करा. त्याच्या आधुनिक डिझाइन आणि सर्वसमावेशक वैशिष्ट्यांसह, टेंपोरल जावास्क्रिप्टमध्ये तारखा, वेळा आणि ड्यूरेशन्स हाताळण्याच्या पद्धतीत क्रांती घडवून आणणार आहे.