जावास्क्रिप्ट में लिखा गया लगभग कोई भी एप्लिकेशन कुछ क्षमता में समय या तारीखों के साथ काम करता है। शुरुआत में, यह बिल्ट-इन डेट एपीआई तक ही सीमित था। इस एपीआई में बुनियादी कार्यक्षमता शामिल है, लेकिन यह जो कर सकती है उसमें काफी सीमित है। मोमेंट.जेएस जैसी तृतीय-पक्ष लाइब्रेरी, और बाद में अंतर्निहित एपीआई जैसे कि इंटेल एपीआई और नई टेम्पोरल एपीआई, समय और तारीखों के साथ काम करने में बहुत अधिक लचीलापन जोड़ते हैं। क्षण का उत्थान और पतन.जे.एस Moment.js समय और तारीखों के साथ काम करने के लिए शक्तिशाली उपयोगिताओं वाली एक जावास्क्रिप्ट लाइब्रेरी है। इसमें मूल दिनांक एपीआई से गायब विशेषताएं शामिल हैं, जैसे समय क्षेत्र हेरफेर, और कई सामान्य संचालन को सरल बनाता है। मोमेंट में दिनांक और समय को फ़ॉर्मेट करने के फ़ंक्शन भी शामिल हैं। यह कई अलग-अलग अनुप्रयोगों में व्यापक रूप से उपयोग की जाने वाली लाइब्रेरी बन गई। हालाँकि, मोमेंट के भी कुछ मुद्दे थे। यह एक बड़ी लाइब्रेरी है, और किसी एप्लिकेशन के बंडल आकार में महत्वपूर्ण रूप से वृद्धि कर सकती है। क्योंकि लाइब्रेरी ट्री शेकिंग का समर्थन नहीं करती है (आधुनिक बंडलर्स की एक सुविधा जो लाइब्रेरी के अप्रयुक्त हिस्सों को हटा सकती है), संपूर्ण मोमेंट लाइब्रेरी शामिल है, भले ही आप इसके केवल एक या दो कार्यों का उपयोग करें। मोमेंट के साथ एक और मुद्दा यह है कि इसके द्वारा बनाई गई वस्तुएं परिवर्तनशील हैं। किसी मोमेंट ऑब्जेक्ट पर कुछ फ़ंक्शंस को कॉल करने के दुष्प्रभाव होते हैं और उस ऑब्जेक्ट का मूल्य बदल जाता है। इससे अप्रत्याशित व्यवहार या बग उत्पन्न हो सकते हैं. 2020 में, मोमेंट के अनुरक्षकों ने लाइब्रेरी को रखरखाव मोड में डालने का निर्णय लिया। कोई नई सुविधा का विकास नहीं किया जा रहा है, और अनुरक्षक नई परियोजनाओं के लिए इसका उपयोग न करने की सलाह देते हैं। अन्य जावास्क्रिप्ट दिनांक लाइब्रेरी हैं, जैसे कि डेट-एफएनएस, लेकिन शहर में एक नया प्लेयर है, एक एपीआई जो सीधे जावास्क्रिप्ट में बनाया गया है: टेम्पोरल। यह एक नया मानक है जो मूल दिनांक एपीआई की खामियों को भरता है और साथ ही मोमेंट और अन्य पुस्तकालयों में पाई जाने वाली कुछ सीमाओं को भी हल करता है। टेम्पोरल क्या है? टेम्पोरल एक नया समय और तारीख एपीआई है जिसे ईसीएमएस्क्रिप्ट मानक में जोड़ा जा रहा है, जो आधुनिक जावास्क्रिप्ट को परिभाषित करता है। मार्च 20266 तक, यह टीसी39 प्रक्रिया (जावास्क्रिप्ट भाषा में प्रस्तावों और परिवर्धन की देखरेख करने वाली समिति) के चरण 4 तक पहुंच गया है, और ईसीएमएस्क्रिप्ट विनिर्देश के अगले संस्करण में शामिल किया जाएगा। इसे पहले ही कई ब्राउज़रों में लागू किया जा चुका है: Chrome 144+ और Firefox 139+, Safari के जल्द ही लागू होने की उम्मीद है। असमर्थित ब्राउज़र और Node.js के लिए एक पॉलीफ़िल भी उपलब्ध है। टेम्पोरल एपीआई ऐसी वस्तुएं बनाता है जो आम तौर पर समय के क्षणों का प्रतिनिधित्व करती हैं। ये किसी दिए गए समय क्षेत्र में पूर्णकालिक और दिनांक टिकट हो सकते हैं, या वे किसी भी समय क्षेत्र या दिनांक की जानकारी के बिना "दीवार घड़ी" समय का एक सामान्य उदाहरण हो सकते हैं। टेम्पोरल की कुछ मुख्य विशेषताओं में शामिल हैं:

तारीखों के साथ या उसके बिना समय। एक अस्थायी वस्तु किसी विशिष्ट तारीख पर एक विशिष्ट समय, या बिना किसी तारीख की जानकारी के समय का प्रतिनिधित्व कर सकती है। बिना समय के भी एक विशिष्ट तिथि का प्रतिनिधित्व किया जा सकता है। समय क्षेत्र समर्थन। टेम्पोरल वस्तुएं पूरी तरह से समय क्षेत्र से अवगत हैं और इन्हें विभिन्न समय क्षेत्रों में परिवर्तित किया जा सकता है। मोमेंट समय क्षेत्र का भी समर्थन करता है, लेकिन इसके लिए अतिरिक्त मोमेंट-टाइमज़ोन लाइब्रेरी की आवश्यकता होती है। अपरिवर्तनीयता। एक बार जब कोई टेम्पोरल ऑब्जेक्ट बन जाता है, तो उसे बदला नहीं जा सकता। समय अंकगणित या समय क्षेत्र रूपांतरण अंतर्निहित वस्तु को संशोधित नहीं करते हैं। इसके बजाय, वे एक नया टेम्पोरल ऑब्जेक्ट उत्पन्न करते हैं। 1-आधारित अनुक्रमण। दिनांक एपीआई (साथ ही मोमेंट) के साथ बग का एक सामान्य स्रोत यह है कि महीने शून्य-अनुक्रमित होते हैं। इसका मतलब यह है कि जनवरी 1 महीना होने के बजाय 0 महीना है, जैसा कि हम सभी वास्तविक जीवन में समझते हैं। टेम्पोरल 1-आधारित अनुक्रमणिका का उपयोग करके इसे ठीक करता है - जनवरी 1 महीना है। यह ब्राउज़र में बनाया गया है। चूंकि टेम्पोरल ब्राउज़र में ही एक एपीआई है, यह आपके एप्लिकेशन के बंडल आकार में कुछ भी नहीं जोड़ता है।

यह भी ध्यान रखना महत्वपूर्ण है कि दिनांक एपीआई दूर नहीं जा रही है। हालाँकि टेम्पोरल इस एपीआई का स्थान लेता है, लेकिन इसे हटाया या बहिष्कृत नहीं किया जा रहा है। यदि ब्राउज़र अचानक दिनांक एपीआई हटा दें तो कई एप्लिकेशन खराब हो जाएंगे। हालाँकि, यह भी ध्यान रखें कि मोमेंट को अब रखरखाव मोड में एक विरासत परियोजना माना जाता है। लेख के शेष भाग में, हम मोमेंट-आधारित कोड को नए टेम्पोरल एपीआई में स्थानांतरित करने के लिए कुछ "व्यंजनों" को देखेंगे। आइए रिफैक्टरिंग शुरू करें! दिनांक और समय ऑब्जेक्ट बनाना इससे पहले कि हम तारीखों और समय में हेरफेर कर सकें, हमें उनका प्रतिनिधित्व करने वाली वस्तुएं बनानी होंगी। वर्तमान दिनांक और समय का प्रतिनिधित्व करने वाला मोमेंट ऑब्जेक्ट बनाने के लिए, मोमेंट फ़ंक्शन का उपयोग करें। अभी स्थिरांक = क्षण(); कंसोल.लॉग(अभी); // क्षण<2026-02-18T21:26:29-05:00>

इस ऑब्जेक्ट को अब आवश्यकतानुसार स्वरूपित या हेरफेर किया जा सकता है।

// यूटीसी में कनवर्ट करें //चेतावनी: यह मोमेंट ऑब्जेक्ट को बदल देता है और इसे यूटीसी मोड में डाल देता है! कंसोल.लॉग(अब.यूटीसी()); // क्षण<2026-02-19T02:26:29Z>

// एक स्वरूपित स्ट्रिंग प्रिंट करें - ध्यान दें कि यह अभी यूटीसी समय का उपयोग कर रहा है कंसोल.लॉग(now.format('MM/DD/YYYY hh:mm:ss a')); // 02/19/2026 02:27:07 पूर्वाह्न

मोमेंट के बारे में याद रखने वाली मुख्य बात यह है कि मोमेंट ऑब्जेक्ट में हमेशा समय और तारीख के बारे में जानकारी शामिल होती है। यदि आपको केवल समय की जानकारी के साथ काम करने की आवश्यकता है, तो यह आमतौर पर ठीक है, लेकिन यह डेलाइट सेविंग टाइम या लीप वर्ष जैसी स्थितियों में अप्रत्याशित व्यवहार का कारण बन सकता है, जहां तारीख समय की गणना पर प्रभाव डाल सकती है। टेम्पोरल अधिक लचीला है। आप Temporal.Instant ऑब्जेक्ट बनाकर वर्तमान दिनांक और समय का प्रतिनिधित्व करने वाला ऑब्जेक्ट बना सकते हैं। यह "युग" (1 जनवरी, 1970 की आधी रात यूटीसी) के बाद से परिभाषित समय में एक बिंदु का प्रतिनिधित्व करता है। टेम्पोरल इस तत्काल समय को नैनोसेकंड-स्तर की सटीकता के साथ संदर्भित कर सकता है। अभी स्थिरांक = Temporal.Now.instant();

// युग के बाद से कच्चे नैनोसेकंड देखें कंसोल.लॉग(अब.एपोचनैनोसेकंड); // 1771466342612000000एन

// यूटीसी के लिए प्रारूप कंसोल.लॉग(अब.टूस्ट्रिंग()); //2026-02-19T01:55:27.844Z

// किसी विशेष समय क्षेत्र के लिए प्रारूप कंसोल.लॉग(अब.टूस्ट्रिंग({ टाइमज़ोन: 'अमेरिका/न्यू_यॉर्क' })); // 2026-02-18T20:56:57.905-05:00

टेम्पोरल.इंस्टेंट ऑब्जेक्ट्स को फ्रॉम स्टैटिक विधि का उपयोग करके एक विशिष्ट समय और तारीख के लिए भी बनाया जा सकता है।

const myInstant = Temporal.Instant.from('2026-02-18T21:10:00-05:00');

// स्थानीय समय क्षेत्र में तत्काल को प्रारूपित करें। ध्यान दें कि यह केवल नियंत्रण करता है // फ़ॉर्मेटिंग - यह मोमेंट.यूटीसी की तरह ऑब्जेक्ट को म्यूटेट नहीं करता है। कंसोल.लॉग(myInstant.toString({timeZone: 'America/New_York' })); //2026-02-18T21:10:00-05:00

आप अन्य प्रकार की टेम्पोरल ऑब्जेक्ट भी बना सकते हैं, जिनमें शामिल हैं:

Temporal.PlainDate: एक तारीख जिसमें समय की कोई जानकारी नहीं है। टेम्पोरल.प्लेनटाइम: एक समय जिसमें कोई तारीख की जानकारी नहीं है। Temporal.ZonedDateTime: एक विशिष्ट समय क्षेत्र में एक दिनांक और समय।

इनमें से प्रत्येक में एक from विधि है जिसे दिनांक और/या समय, या पार्स करने के लिए दिनांक स्ट्रिंग निर्दिष्ट करने वाली ऑब्जेक्ट के साथ बुलाया जा सकता है। // बस एक तारीख स्थिरांक आज = Temporal.PlainDate.from({ वर्ष: 2026, महीना: 2, // ध्यान दें कि हम फरवरी के लिए 2 का उपयोग कर रहे हैं दिन: 18 }); कंसोल.लॉग(आज.टूस्ट्रिंग()); //2026-02-18

//बस एक समय स्थिरांक लंचटाइम = टेम्पोरल.प्लेनटाइम.फ्रॉम({ घंटा: 12 }); कंसोल.लॉग(lunchTime.toString()); // 12:00:00

// यूएस पूर्वी समय क्षेत्र में एक दिनांक और समय स्थिरांक देयएट = Temporal.ZonedDateTime.from({ समयक्षेत्र: 'अमेरिका/न्यूयॉर्क', वर्ष: 2026, महीना: 3, दिन: 1, घंटा: 12, मिनट: 0, दूसरा: 0 }); कंसोल.लॉग(dueAt.toString()); // 2026-03-01T12:00:00-05:00[अमेरिका/न्यूयॉर्क]

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

स्थिरांक isoDate = क्षण('2026-02-21T09:00:00'); स्थिरांक स्वरूपित दिनांक = क्षण('2/21/26 9:00:00', 'एम/डी/वाईवाई एच:मिमी:एसएस');

कंसोल.लॉग(आइसोडेट); // क्षण<2026-02-21T09:00:00-05:00>

कंसोल.लॉग(स्वरूपित दिनांक); // क्षण<2026-02-21T09:00:00-05:00>

पुराने संस्करणों में, मोमेंट किसी भी मनमाने ढंग से स्वरूपित दिनांक स्ट्रिंग को पार्स करने का सबसे अच्छा अनुमान लगाता था। इससे अप्रत्याशित परिणाम हो सकते हैं. उदाहरण के लिए, 02-03-2026 फरवरी 2 है या 3 मार्च? इस कारण से, मोमेंट के नए संस्करण एक प्रमुख बहिष्करण चेतावनी प्रदर्शित करते हैं यदि इसे आईएसओ स्वरूपित दिनांक स्ट्रिंग के बिना कॉल किया जाता है (जब तक कि वांछित प्रारूप के साथ दूसरा तर्क भी नहीं दिया गया हो)। टेम्पोरल केवल विशेष रूप से स्वरूपित दिनांक स्ट्रिंग को पार्स करेगा। स्ट्रिंग को आईएसओ 8601 प्रारूप या इसके एक्सटेंशन, आरएफसी 9557 के अनुरूप होना चाहिए। यदि एक गैर-अनुपालक दिनांक स्ट्रिंग को विधि से पास किया जाता है, तो टेम्पोरल एक रेंजएरर फेंक देगा।

// RFC 9557 दिनांक स्ट्रिंग का उपयोग करना const myDate = Temporal.Instant.from('2026-02-21T09:00:00-05:00[America/New_York]'); कंसोल.लॉग(myDate.toString({timeZone: 'America/New_York' })); //2026-02-21T09:00:00-05:00

// अज्ञात दिनांक स्ट्रिंग का उपयोग करना स्थिरांक अन्यदिनांक = Temporal.Instant.from('2/21/26 9:00:00'); // रेंज एरर: अस्थायी त्रुटि: वर्ष मान पार्स करते समय अमान्य वर्ण।

दिनांक स्ट्रिंग की सटीक आवश्यकताएं इस बात पर निर्भर करती हैं कि आप किस प्रकार की टेम्पोरल ऑब्जेक्ट बना रहे हैं। उपरोक्त उदाहरण में, Temporal.Instant को पूर्ण ISO की आवश्यकता है8601 या आरएफसी 9557 दिनांक स्ट्रिंग समय क्षेत्र ऑफसेट के साथ दिनांक और समय निर्दिष्ट करती है, लेकिन आप दिनांक प्रारूप के केवल एक सबसेट का उपयोग करके प्लेनडेट या प्लेनटाइम ऑब्जेक्ट भी बना सकते हैं। const myDate = Temporal.PlainDate.from('2026-02-21'); कंसोल.लॉग(myDate.toString()); //2026-02-21

स्थिरांक myTime = Temporal.PlainTime.from('09:00:00'); कंसोल.लॉग(myTime.toString()); // 09:00:00

ध्यान दें कि इन स्ट्रिंग्स को अभी भी अपेक्षित प्रारूप का अनुपालन करना होगा, अन्यथा एक त्रुटि उत्पन्न हो जाएगी।

// गैर-अनुपालक समय स्ट्रिंग का उपयोग करना। ये सभी एक रेंज एरर फेंकेंगे। टेम्पोरल.प्लेनटाइम.फ्रॉम('9:00'); Temporal.PlainTime.from('9:00:00 AM');

प्रो टिप: गैर-आईएसओ स्ट्रिंग्स को संभालना क्योंकि टेम्पोरल विश्वसनीयता को प्राथमिकता देता है, यह 02-01-2026 जैसी स्ट्रिंग के प्रारूप का अनुमान लगाने की कोशिश नहीं करेगा। यदि आपका डेटा स्रोत ऐसी स्ट्रिंग्स का उपयोग करता है, तो आपको टेम्पोरल के साथ इसका उपयोग करने का प्रयास करने से पहले मानों को 2026-02-01 जैसी आईएसओ स्ट्रिंग में पुनर्व्यवस्थित करने के लिए कुछ स्ट्रिंग हेरफेर करने की आवश्यकता होगी।

स्वरूपण एक बार जब आपके पास मोमेंट या टेम्पोरल ऑब्जेक्ट हो, तो आप शायद इसे किसी बिंदु पर एक स्वरूपित स्ट्रिंग में परिवर्तित करना चाहेंगे। यह एक ऐसा उदाहरण है जहां क्षण थोड़ा अधिक संक्षिप्त है। आप ऑब्जेक्ट की प्रारूप विधि को टोकन की एक स्ट्रिंग के साथ कॉल करते हैं जो वांछित दिनांक प्रारूप का वर्णन करता है। स्थिरांक दिनांक = क्षण();

कंसोल.लॉग(दिनांक.प्रारूप('एमएम/डीडी/वाईवाईवाईवाई')); // 02/22/2026

कंसोल.लॉग(दिनांक.प्रारूप('MMMM Do YYYY, h:mm:ss a')); // 22 फरवरी 2026, 8:18:30 अपराह्न

दूसरी ओर, टेम्पोरल के लिए आपको थोड़ा अधिक क्रियाशील होने की आवश्यकता है। टेम्पोरल ऑब्जेक्ट, जैसे इंस्टेंट, में एक toLocaleString विधि होती है जो किसी ऑब्जेक्ट के गुणों के रूप में निर्दिष्ट विभिन्न स्वरूपण विकल्पों को स्वीकार करती है।

स्थिरांक दिनांक = Temporal.Now.instant();

// बिना किसी तर्क के, हमें वर्तमान लोकेल के लिए डिफ़ॉल्ट प्रारूप मिलेगा कंसोल.लॉग(date.toLocaleString()); // 2/22/2026, 8:23:36 अपराह्न (एन-यूएस का स्थान मानते हुए)

// कस्टम प्रारूप स्ट्रिंग उत्पन्न करने के लिए स्वरूपण विकल्प पास करें कंसोल.लॉग(date.toLocaleString('en-US', { महीना: 'लंबा', दिन: 'संख्यात्मक', वर्ष: 'संख्यात्मक', घंटा: '2-अंकीय', मिनट: '2-अंकीय' })); // 22 फरवरी 2026 रात्रि 8:23 बजे

// केवल उन फ़ील्ड को पास करें जिन्हें आप प्रारूप स्ट्रिंग में चाहते हैं कंसोल.लॉग(date.toLocaleString('en-US', { महीना: 'छोटा', दिन: 'संख्यात्मक' })); // 22 फरवरी

टेम्पोरल दिनांक स्वरूपण वास्तव में हुड के तहत Intl.DateTimeFormat API (जो आधुनिक ब्राउज़रों में पहले से ही आसानी से उपलब्ध है) का उपयोग करता है। इसका मतलब है कि आप अपने कस्टम फ़ॉर्मेटिंग विकल्पों के साथ एक पुन: प्रयोज्य DateTimeFormat ऑब्जेक्ट बना सकते हैं, फिर टेम्पोरल ऑब्जेक्ट को उसके प्रारूप विधि में पास कर सकते हैं। इस वजह से, यह मोमेंट की तरह कस्टम दिनांक प्रारूपों का समर्थन नहीं करता है। यदि आपको 'Q1 2026' या अन्य विशिष्ट फ़ॉर्मेटिंग जैसी किसी चीज़ की आवश्यकता है, तो आपको कुछ कस्टम दिनांक फ़ॉर्मेटिंग कोड या किसी तृतीय-पक्ष लाइब्रेरी तक पहुंच की आवश्यकता हो सकती है। स्थिरांक फ़ॉर्मेटर = नया Intl.DateTimeFormat('en-US', { महीना: '2-अंकीय', दिन: '2-अंकीय', वर्ष: 'संख्यात्मक' });

स्थिरांक दिनांक = Temporal.Now.instant(); कंसोल.लॉग(फ़ॉर्मेटर.फ़ॉर्मेट(दिनांक)); // 02/22/2026

मोमेंट के फ़ॉर्मेटिंग टोकन लिखना आसान है, लेकिन वे स्थानीय-अनुकूल नहीं हैं। प्रारूप महीने/दिन के क्रम जैसी चीज़ों को "हार्ड कोड" स्ट्रिंग करता है। कॉन्फ़िगरेशन ऑब्जेक्ट का उपयोग करने का लाभ, जैसा कि टेम्पोरल करता है, यह है कि यह स्वचालित रूप से किसी भी दिए गए स्थान के अनुकूल हो जाएगा और सही प्रारूप का उपयोग करेगा। स्थिरांक दिनांक = Temporal.Now.instant();

स्थिरांक प्रारूप विकल्प = { महीना: 'संख्यात्मक', दिन: 'संख्यात्मक', वर्ष: 'संख्यात्मक' };

कंसोल.लॉग(date.toLocaleString('en-US', formOptions)); // 2/22/2026

कंसोल.लॉग(date.toLocaleString('en-GB', formOptions)); // 22/02/2026

तिथि गणना कई अनुप्रयोगों में, आपको किसी तिथि पर कुछ गणनाएँ करने की आवश्यकता होगी। आप समय की इकाइयों (दिन, घंटे, सेकंड, आदि) को जोड़ना या घटाना चाह सकते हैं। उदाहरण के लिए, यदि आपके पास वर्तमान तारीख है, तो आप उपयोगकर्ता को अब से 1 सप्ताह बाद की तारीख दिखाना चाह सकते हैं। मोमेंट ऑब्जेक्ट में जोड़ और घटाव जैसी विधियाँ होती हैं जो ये ऑपरेशन करती हैं। ये फ़ंक्शन एक मान और एक इकाई लेते हैं, उदाहरण के लिए: जोड़ें(7, 'दिन')। हालाँकि, मोमेंट और टेम्पोरल के बीच एक बहुत महत्वपूर्ण अंतर यह है कि इन तिथि गणनाओं को निष्पादित करते समय, अंतर्निहित वस्तु को संशोधित किया जाता है और इसका मूल मूल्य खो जाता है। अभी स्थिरांक = क्षण();

कंसोल.लॉग(अभी); // क्षण<2026-02-24T20:08:36-05:00>

स्थिरांक अगला सप्ताह = अभी जोड़ें(7, 'दिन'); कंसोल.लॉग(अगला सप्ताह); // क्षण<2026-03-03T20:08:36-05:00>

// गोचा - मूल वस्तु को उत्परिवर्तित किया गया था कंसोल.लॉग(अभी); // क्षण<2026-03-03T20:08:36-05:00>

मूल तिथि खोने से बचने के लिए, आप प्रतिलिपि बनाने के लिए मोमेंट ऑब्जेक्ट पर क्लोन को कॉल कर सकते हैं। अभी स्थिरांक= क्षण(); स्थिरांक अगला सप्ताह = अब.क्लोन().जोड़ें(7, 'दिन');

कंसोल.लॉग(अभी); // क्षण<2026-02-24T20:12:55-05:00>

कंसोल.लॉग(अगला सप्ताह); // क्षण<2026-03-03T20:12:55-05:00>

दूसरी ओर, टेम्पोरल वस्तुएं अपरिवर्तनीय हैं। एक बार जब आप इंस्टेंट, प्लेनडेट इत्यादि जैसी कोई वस्तु बना लेते हैं, तो उस वस्तु का मूल्य कभी नहीं बदलेगा। अस्थायी वस्तुओं में जोड़ने और घटाने की विधियाँ भी होती हैं। टेम्पोरल इस बारे में थोड़ा चयनात्मक है कि किस समय इकाइयों को किस वस्तु प्रकार में जोड़ा जा सकता है। उदाहरण के लिए, आप किसी इंस्टेंट में दिन नहीं जोड़ सकते:

अभी स्थिरांक = Temporal.Now.instant(); स्थिरांक अगला सप्ताह = अब.जोड़ें({ दिन: 7 }); // रेंज एरर: अस्थायी त्रुटि: सबसे बड़ी इकाई दिनांक इकाई नहीं हो सकती

ऐसा इसलिए है क्योंकि तत्काल वस्तुएं यूटीसी में समय में एक विशिष्ट बिंदु का प्रतिनिधित्व करती हैं और कैलेंडर-अज्ञेयवादी होती हैं। चूँकि डेलाइट सेविंग टाइम जैसे समय क्षेत्र नियमों के आधार पर दिन की लंबाई बदल सकती है, इसलिए यह गणना तत्काल पर उपलब्ध नहीं है। हालाँकि, आप इस ऑपरेशन को अन्य प्रकार की वस्तुओं पर कर सकते हैं, जैसे कि प्लेनडेटटाइम: अभी स्थिरांक = Temporal.Now.plainDateTimeISO(); कंसोल.लॉग(अब.toLocaleString()); // 2/24/2026, 8:23:59 अपराह्न

स्थिरांक अगला सप्ताह = अब.जोड़ें({ दिन: 7 });

//ध्यान दें कि मूल प्लेनडेटटाइम अपरिवर्तित रहता है कंसोल.लॉग(अब.toLocaleString()); // 2/24/2026, 8:23:59 अपराह्न

कंसोल.लॉग(nextWeek.toLocaleString()); //3/3/2026, 8:23:59 अपराह्न

आप यह भी गणना कर सकते हैं कि दो क्षण या अस्थायी वस्तुओं के बीच कितना समय है। मोमेंट के डिफ फ़ंक्शन के साथ, आपको ग्रैन्युलैरिटी के लिए एक इकाई प्रदान करने की आवश्यकता है, अन्यथा यह मिलीसेकंड में अंतर लौटा देगा। स्थिरांक दिनांक1 = क्षण('2026-02-21T09:00:00'); स्थिरांक दिनांक2 = क्षण('2026-02-22टी10:30:00');

कंसोल.लॉग(date2.diff(date1)); // 91800000

कंसोल.लॉग(दिनांक2.diff(दिनांक1, 'दिन')); // 1

टेम्पोरल ऑब्जेक्ट के साथ ऐसा करने के लिए, आप किसी अन्य टेम्पोरल ऑब्जेक्ट को उसके जब तक या उसके बाद के तरीकों से पास कर सकते हैं। यह एक Temporal.Duration ऑब्जेक्ट लौटाता है जिसमें समय के अंतर के बारे में जानकारी होती है। अवधि ऑब्जेक्ट में अंतर के प्रत्येक घटक के लिए गुण होते हैं, और यह समय अंतर का प्रतिनिधित्व करने वाली आईएसओ 8601 अवधि स्ट्रिंग भी उत्पन्न कर सकता है।

स्थिरांक दिनांक1 = Temporal.PlainDateTime.from('2026-02-21T09:00:00'); स्थिरांक दिनांक2 = Temporal.PlainDateTime.from('2026-02-22T10:30:00');

// सबसे बड़ी इकाई प्रतिनिधित्व करने के लिए समय की सबसे बड़ी इकाई निर्दिष्ट करती है // अवधि गणना में स्थिरांक अंतर = दिनांक2.चूंकि(दिनांक1, {सबसे बड़ी इकाई: 'दिन' });

कंसोल.लॉग(diff.days); // 1

कंसोल.लॉग(diff.hours); // 1

कंसोल.लॉग(diff.मिनट); //30

कंसोल.लॉग(diff.toString()); //P1DT1H30M // (आईएसओ 8601 अवधि स्ट्रिंग: 1 दिन, 1 घंटा, 30 मिनट)

दिनांक और समय की तुलना करना मोमेंट और टेम्पोरल दोनों आपको तारीखों और समय की तुलना करके यह निर्धारित करने देते हैं कि कौन दूसरे से पहले आता है, लेकिन एपीआई के साथ अलग-अलग दृष्टिकोण अपनाते हैं। मोमेंट दो मोमेंट ऑब्जेक्ट की तुलना करने के लिए isBefore, isAfter, और isSame जैसे तरीके प्रदान करता है। स्थिरांक दिनांक1 = क्षण('2026-02-21T09:00:00'); स्थिरांक दिनांक2 = क्षण('2026-02-22टी10:30:00');

कंसोल.लॉग(date1.isBefore(date2)); // सत्य

टेम्पोरल एक ही प्रकार की दो वस्तुओं के बीच तुलना करने के लिए एक स्थिर तुलना विधि का उपयोग करता है। यदि पहली तारीख दूसरी से पहले आती है तो यह -1 देता है, यदि वे बराबर हैं तो 0 देता है, या यदि पहली तारीख दूसरी के बाद आती है तो 1 लौटाता है। निम्नलिखित उदाहरण दिखाता है कि दो प्लेनडेट ऑब्जेक्ट की तुलना कैसे करें। Temporal.PlainDate.compare के दोनों तर्क प्लेनडेट ऑब्जेक्ट होने चाहिए।

स्थिरांक दिनांक1 = Temporal.PlainDate.from({ वर्ष: 2026, माह: 2, दिन: 24 }); स्थिरांक दिनांक2 = Temporal.PlainDate.from({ वर्ष: 2026, माह: 3, दिन: 24 });

// दिनांक1 दिनांक2 से पहले आता है, इसलिए -1 कंसोल.लॉग(Temporal.PlainDate.compare(date1, date2));

// यदि हम विभिन्न प्रकार की दो वस्तुओं की तुलना करने का प्रयास करते हैं तो त्रुटि कंसोल.लॉग(Temporal.PlainDate.compare(date1, Temporal.Now.instant())); // लेखन त्रुटि: अस्थायी त्रुटि: अमान्य प्लेनडेट फ़ील्ड प्रदान की गईं।

विशेष रूप से, इससे टेम्पोरल वस्तुओं की एक श्रृंखला को कालानुक्रमिक रूप से क्रमबद्ध करना आसान हो जाता है। // Temporal.PlainDate ऑब्जेक्ट की एक सरणी स्थिर तिथियाँ = [...];

// तुलनित्र फ़ंक्शन के रूप में Temporal.PlainDate.compare का उपयोग करें दिनांक.सॉर्ट(टेम्पोरल.प्लेनडेट.तुलना);

समय क्षेत्र रूपांतरण कोर मोमेंट लाइब्रेरी समय क्षेत्र रूपांतरणों का समर्थन नहीं करती है। यदि आपको इस कार्यक्षमता की आवश्यकता है, तो आपको मोमेंट-टाइमज़ोन पैकेज भी स्थापित करना होगा। यह पैकेज पेड़ को हिलाने योग्य नहीं है, और इसलिए आपके बंडल के आकार में उल्लेखनीय वृद्धि कर सकता है। एक बार जब आप मोमेंट-टाइमज़ोन स्थापित कर लेते हैं, तो आप tz विधि से मोमेंट ऑब्जेक्ट को अलग-अलग समय क्षेत्रों में परिवर्तित कर सकते हैं। अन्य मोमेंट ऑपरेशंस की तरह, यह अंतर्निहित को बदल देता हैवस्तु। // अमेरिका का पूर्वी समय मानते हुए अभी स्थिरांक = क्षण(); कंसोल.लॉग(अभी); // क्षण<2026-02-28T20:08:20-05:00>

// प्रशांत समय में कनवर्ट करें। // मूल पूर्वी समय खो गया है। now.tz('अमेरिका/लॉसएंजेल्स'); कंसोल.लॉग(अभी); // क्षण<2026-02-28T17:08:20-08:00>

Temporal.ZonedDateTime ऑब्जेक्ट का उपयोग करते समय समय क्षेत्र कार्यक्षमता Temporal API में निर्मित होती है। इन ऑब्जेक्ट में एक withTimeZone विधि शामिल है जो समय में उसी क्षण का प्रतिनिधित्व करते हुए एक नया ZonedDateTime लौटाती है, लेकिन निर्दिष्ट समय क्षेत्र में। // फिर से, यूएस पूर्वी समय मानते हुए अभी स्थिरांक = Temporal.Now.zonedDateTimeISO(); कंसोल.लॉग(अब.toLocaleString()); // 2/28/2026, 8:12:02 अपराह्न ईएसटी

// प्रशांत समय में कनवर्ट करें const nowPacific = now.withTimeZone('अमेरिका/लॉस_एंजेल्स'); कंसोल.लॉग(nowPacific.toLocaleString()); // 2/28/2026, 5:12:02 अपराह्न पीएसटी

// मूल वस्तु अपरिवर्तित रहती है कंसोल.लॉग(अब.toLocaleString()); // 2/28/2026, 8:12:02 अपराह्न ईएसटी

नोट: जैसा कि नाम से पता चलता है, toLocaleString द्वारा लौटाए गए स्वरूपित मान स्थानीय-निर्भर हैं। नमूना कोड एन-यूएस लोकेल में विकसित किया गया था, इसलिए प्रारूप इस प्रकार है: 2/28/2026, 5:12:02 अपराह्न पीएसटी। किसी अन्य स्थान में, यह भिन्न हो सकता है. उदाहरण के लिए, एन-जीबी लोकेल में, आपको 28/2/2026, 17:12:02 GMT-8 जैसा कुछ मिलेगा। एक वास्तविक दुनिया रिफैक्टरिंग मान लीजिए कि हम विभिन्न समय क्षेत्रों में ईवेंट शेड्यूल करने के लिए एक ऐप बना रहे हैं। इस ऐप का एक भाग एक फ़ंक्शन है, getEventTimes, जो इवेंट के समय और तारीख, स्थानीय समय क्षेत्र और लक्ष्य समय क्षेत्र का प्रतिनिधित्व करने वाली ISO 8601 स्ट्रिंग लेता है। फ़ंक्शन दोनों समय क्षेत्रों में ईवेंट के लिए स्वरूपित समय और दिनांक स्ट्रिंग बनाता है। यदि फ़ंक्शन को एक इनपुट स्ट्रिंग दी गई है जो वैध समय/दिनांक स्ट्रिंग नहीं है, तो यह एक त्रुटि उत्पन्न करेगा। यहां मोमेंट का उपयोग करते हुए मूल कार्यान्वयन दिया गया है (मोमेंट-टाइमज़ोन पैकेज के उपयोग की भी आवश्यकता है)।

'क्षण-समयक्षेत्र' से आयात क्षण;

फ़ंक्शन getEventTimes(inputString, userTimeZone, targetTimeZone) { const timeFormat = 'MMM D, YYYY, h:mm:ss a z';

// 1. उपयोगकर्ता के समय क्षेत्र में प्रारंभिक क्षण बनाएं स्थिरांक इवेंटटाइम = क्षण.tz( इनपुटस्ट्रिंग, क्षण.ISO_8601, // ISO 8601 स्ट्रिंग की अपेक्षा करें सत्य, // सख्त विश्लेषण उपयोगकर्तासमय क्षेत्र );

// यदि इनपुटस्ट्रिंग वैध दिनांक का प्रतिनिधित्व नहीं करता है तो एक त्रुटि उत्पन्न करें यदि (!eventTime.isValid()) { नई त्रुटि फेंकें ('अमान्य दिनांक/समय इनपुट'); }

// 2. लक्ष्य समय की गणना करें // गंभीर: हमें क्लोन करना होगा, अन्यथा 'इवेंटटाइम' हमेशा के लिए बदल जाएगा! स्थिरांक लक्ष्य समय = इवेंटटाइम.क्लोन().tz(targetTimeZone);

वापसी { स्थानीय: इवेंटटाइम.फॉर्मेट(टाइमफॉर्मेट), लक्ष्य: targetTime.format(timeFormat), }; }

स्थिरांक शेड्यूल = getEventTimes( '2026-03-05T15:00-05:00', 'अमेरिका/न्यूयॉर्क', 'यूरोप/लंदन', );

कंसोल.लॉग(शेड्यूल.लोकल); // मार्च 5, 2026, 3:00:00 अपराह्न ईएसटी

कंसोल.लॉग(शेड्यूल.लक्ष्य); // मार्च 5, 2026, 8:00:00 अपराह्न जीएमटी

इस उदाहरण में, हम आईएसओ 8601 के अपेक्षित दिनांक प्रारूप का उपयोग कर रहे हैं, जो मोमेंट में सहायक रूप से निर्मित है। हम सख्त पार्सिंग का भी उपयोग कर रहे हैं, जिसका अर्थ है कि मोमेंट किसी दिनांक स्ट्रिंग के साथ अनुमान लगाने का प्रयास नहीं करेगा जो प्रारूप से मेल नहीं खाता है। यदि एक गैर-आईएसओ दिनांक स्ट्रिंग पारित की जाती है, तो इसके परिणामस्वरूप एक अमान्य दिनांक ऑब्जेक्ट होगा, और हम एक त्रुटि उत्पन्न करेंगे। टेम्पोरल कार्यान्वयन समान दिखता है, लेकिन इसमें कुछ महत्वपूर्ण अंतर हैं।

फ़ंक्शन getEventTimes(inputString, userTimeZone, targetTimeZone) { // 1. इनपुट को सीधे इंस्टेंट में पार्स करें, फिर बनाएं // उपयोगकर्ता के क्षेत्र में एक ZonedDateTime। स्थिरांक तत्काल = Temporal.Instant.from(inputString); स्थिरांक इवेंटटाइम = इंस्टेंट.toZonedDateTimeISO(userTimeZone);

// 2. लक्ष्य क्षेत्र में कनवर्ट करें // यह स्वचालित रूप से एक नई वस्तु लौटाता है; 'इवेंटटाइम' सुरक्षित है. const targetTime = इवेंटटाइम.withTimeZone(targetTimeZone);

// 3. Intl का उपयोग करके प्रारूपित करें (अंतर्निहित) स्थिरांक विकल्प = { वर्ष: 'संख्यात्मक', महीना: 'छोटा', दिन: 'संख्यात्मक', घंटा: 'संख्यात्मक', मिनट: '2-अंकीय', दूसरा: '2-अंकीय', टाइमज़ोननाम: 'छोटा' };

वापसी { स्थानीय: इवेंटटाइम.टूलोकेलस्ट्रिंग(नेविगेटर.भाषा, विकल्प), लक्ष्य: targetTime.toLocaleString(नेविगेटर.भाषा, विकल्प) }; }

स्थिरांक शेड्यूल = getEventTimes( '2026-03-05T15:00-05:00', 'अमेरिका/न्यूयॉर्क', 'यूरोप/लंदन', );

कंसोल.लॉग(शेड्यूल.लोकल); // मार्च 5, 2026, 3:00:00 अपराह्न ईएसटी

कंसोल.लॉग(शेड्यूल.लक्ष्य); // मार्च 5, 2026, 8:00:00 अपराह्न जीएमटी

मोमेंट के साथ, हमें परिणामी दिनांक स्ट्रिंग के लिए स्पष्ट रूप से एक प्रारूप स्ट्रिंग निर्दिष्ट करना होगा। उपयोगकर्ता के स्थान या स्थान की परवाह किए बिना, ईवेंट का समय हमेशा मार्च 5, 2026, 3:00:00 के रूप में प्रारूपित किया जाएगा।अपराह्न ईएसटी. साथ ही, हमें स्पष्ट रूप से कोई अपवाद नहीं फेंकना होगा। यदि कोई अमान्य स्ट्रिंग Temporal.Instant.from को पास कर दी जाती है, तो Temporal हमारे लिए अपवाद फेंक देगा। ध्यान देने वाली बात यह है कि सख्त विश्लेषण के साथ भी, मोमेंट संस्करण अभी भी अधिक उदार है। टेम्पोरल को स्ट्रिंग के अंत में समय क्षेत्र ऑफसेट की आवश्यकता होती है। आपको यह भी ध्यान रखना चाहिए कि चूंकि हम नेविगेटर.भाषा का उपयोग कर रहे हैं, यह कोड केवल ब्राउज़र वातावरण में चलेगा, क्योंकि नेविगेटर को Node.js वातावरण में परिभाषित नहीं किया गया है। टेम्पोरल कार्यान्वयन ब्राउज़र के वर्तमान लोकेल (नेविगेटर.भाषा) का उपयोग करता है, इसलिए उपयोगकर्ता को स्वचालित रूप से उनके स्थानीय समय प्रारूप में ईवेंट समय स्वरूपित मिल जाएगा। एन-यूएस लोकेल में, यह 5 मार्च, 2026, 3:00:00 अपराह्न ईएसटी है। हालाँकि, उदाहरण के लिए, यदि उपयोगकर्ता लंदन में है, तो इवेंट का समय 5 मार्च 2026, 15:00:00 GMT-5 के रूप में प्रारूपित किया जाएगा। सारांश

कार्रवाई मोमेंट.जे.एस अस्थायी वर्तमान समय क्षण() Temporal.Now.zonedDateTimeISO() पार्सिंग आईएसओ क्षण(str) अस्थायी.तत्काल.से(str) समय जोड़ें .जोड़ें(7, 'दिन') (उत्परिवर्तित) .जोड़ें({ दिन: 7 }) (नई वस्तु) अंतर .diff(अन्य, 'घंटे') .चूंकि(अन्य).घंटे समय क्षेत्र .tz('क्षेत्र/नाम') .withTimeZone('ज़ोन/नाम')

पहली नज़र में, अंतर थोड़ा अलग हो सकता है (और टेम्पोरल के मामले में, कभी-कभी अधिक क्रियात्मक और अधिक सख्त) सिंटैक्स, लेकिन मोमेंट.जेएस पर टेम्पोरल का उपयोग करने के कई प्रमुख फायदे हैं:

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

पॉलीफ़िल पर नोट्स जैसा कि पहले उल्लेख किया गया है, एक टेम्पोरल पॉलीफ़िल उपलब्ध है, जिसे @js-temporal/polyfill नामक एनपीएम पैकेज के रूप में वितरित किया जाता है। यदि आप आज टेम्पोरल का उपयोग करना चाहते हैं, तो आपको सफ़ारी जैसे ब्राउज़र का समर्थन करने के लिए इस पॉलीफ़िल की आवश्यकता होगी जिन्होंने अभी तक एपीआई शिप नहीं किया है। इसके साथ बुरी खबर यह है कि यह आपके बंडल के आकार को बढ़ा देगा। अच्छी खबर यह है कि यह अभी भी क्षण या क्षण-समयक्षेत्र की तुलना में काफी कम जोड़ता है। यहां बंडल आकारों की तुलना दी गई है जैसा कि बंडलफोबिया.कॉम द्वारा रिपोर्ट किया गया है, एक वेबसाइट जो एनपीएम पैकेज आकारों पर जानकारी प्रस्तुत करती है (बंडलफोबिया विश्लेषण देखने के लिए प्रत्येक पैकेज नाम पर क्लिक करें):

पैकेज छोटा किया गया छोटा और gzipped @जेएस-टेम्पोरल/पॉलीफ़िल 154.1 केबी 44.1 केबी क्षण 294.4 केबी 75.4 केबी क्षण-समयक्षेत्र 1 एमबी 114.2 केबी

पॉलीफ़िल में ऐतिहासिक रूप से मेमोरी उपयोग के संबंध में कुछ प्रदर्शन समस्याएं थीं, और लेखन के समय, इसे अल्फ़ा स्थिति में माना जाता है। इस वजह से, जब तक यह अधिक परिपक्व अवस्था में नहीं पहुंच जाता, तब तक आप इसका उत्पादन में उपयोग नहीं करना चाहेंगे। दूसरी अच्छी खबर यह है कि उम्मीद है कि पॉलीफ़िल की अधिक समय तक आवश्यकता नहीं होगी (जब तक कि आपको निश्चित रूप से पुराने ब्राउज़रों का समर्थन करने की आवश्यकता न हो)। लेखन के समय, टेम्पोरल को क्रोम, एज और फ़ायरफ़ॉक्स में भेज दिया गया है। यह अभी तक सफारी में पूरी तरह से तैयार नहीं है, हालांकि यह नवीनतम प्रौद्योगिकी पूर्वावलोकन पर रनटाइम ध्वज के साथ उपलब्ध प्रतीत होता है।

You May Also Like

Enjoyed This Article?

Get weekly tips on growing your audience and monetizing your content — straight to your inbox.

No spam. Join 138,000+ creators. Unsubscribe anytime.

Create Your Free Bio Page

Join 138,000+ creators on Seemless.

Get Started Free