जाभास्क्रिप्टमा लेखिएको लगभग कुनै पनि प्रकारको अनुप्रयोगले केही क्षमतामा समय वा मितिहरूसँग काम गर्दछ। सुरुमा, यो निर्मित मिति API मा सीमित थियो। यस API मा आधारभूत कार्यक्षमता समावेश छ, तर यसले के गर्न सक्छ भन्ने कुरामा सीमित छ। तेस्रो-पक्ष पुस्तकालयहरू जस्तै Moment.js, र पछि निर्मित APIs जस्तै Intl API र नयाँ टेम्पोरल API, समय र मितिहरूसँग काम गर्न धेरै लचिलोपन थप्छन्। पलको उदय र पतन।js Moment.js एक जाभास्क्रिप्ट पुस्तकालय हो जुन समय र मितिहरूसँग काम गर्नका लागि शक्तिशाली उपयोगिताहरू छन्। यसले आधारभूत मिति API बाट छुटेका सुविधाहरू समावेश गर्दछ, जस्तै समय क्षेत्र हेरफेर, र धेरै सामान्य सञ्चालनहरू सरल बनाउँछ। Moment मा मिति र समय ढाँचाका लागि कार्यहरू पनि समावेश छन्। यो धेरै विभिन्न अनुप्रयोगहरूमा व्यापक रूपमा प्रयोग गरिएको पुस्तकालय बन्यो। जे होस्, पलमा पनि यसको मुद्दाहरू थिए। यो एक ठूलो पुस्तकालय हो, र अनुप्रयोगको बन्डल आकारमा उल्लेखनीय रूपमा थप्न सक्छ। किनभने पुस्तकालयले रूख हल्लाउने समर्थन गर्दैन (आधुनिक बन्डलरहरूको एक विशेषता जसले पुस्तकालयहरूको प्रयोग नगरिएका भागहरू हटाउन सक्छ), सम्पूर्ण पल पुस्तकालय समावेश गरिएको छ यदि तपाईंले यसको एक वा दुई कार्यहरू मात्र प्रयोग गर्नुहुन्छ भने पनि। मोमेन्टको साथ अर्को मुद्दा यो तथ्य हो कि यसले सिर्जना गर्ने वस्तुहरू परिवर्तनशील छन्। मोमेन्ट वस्तुमा निश्चित प्रकार्यहरू कल गर्दा साइड इफेक्टहरू हुन्छन् र त्यस वस्तुको मूल्यलाई परिवर्तन गर्दछ। यसले अप्रत्याशित व्यवहार वा बगहरू निम्त्याउन सक्छ। २०२० मा, मोमेन्टका मर्मतकर्ताहरूले पुस्तकालयलाई मर्मत मोडमा राख्ने निर्णय गरे। कुनै नयाँ सुविधा विकास भइरहेको छैन, र रखरखावकर्ताहरूले यसलाई नयाँ परियोजनाहरूको लागि प्रयोग नगर्न सिफारिस गर्छन्। त्यहाँ अन्य JavaScript मिति पुस्तकालयहरू छन्, जस्तै date-fns, तर त्यहाँ सहरमा एउटा नयाँ प्लेयर छ, एउटा API सीधा JavaScript मा निर्मित: Temporal। यो एक नयाँ मानक हो जसले मूल मिति API को प्वालहरूमा भर्छ र साथै पल र अन्य पुस्तकालयहरूमा पाइने केही सीमितताहरू समाधान गर्दछ। टेम्पोरल के हो? Temporal ECMAScript मानकमा थपिएको नयाँ समय र मिति API हो, जसले आधुनिक JavaScript लाई परिभाषित गर्दछ। मार्च 20266 सम्म, यो TC39 प्रक्रिया (जाभास्क्रिप्ट भाषामा प्रस्तावहरू र थपहरूको निरीक्षण गर्ने समिति) को चरण 4 मा पुगेको छ, र ECMAScript विशिष्टताको अर्को संस्करणमा समावेश गरिनेछ। यो पहिले नै धेरै ब्राउजरहरूमा लागू गरिएको छ: क्रोम 144+ र फायरफक्स 139+, सफारीले चाँडै पछ्याउने अपेक्षा गरिएको छ। एक polyfill असमर्थित ब्राउजर र Node.js को लागी पनि उपलब्ध छ। Temporal API ले वस्तुहरू सिर्जना गर्दछ जुन, सामान्यतया, समय मा क्षणहरू प्रतिनिधित्व गर्दछ। यी दिइएको समय क्षेत्रमा पूर्ण-समय र मिति टिकटहरू हुन सक्छन्, वा तिनीहरू कुनै पनि समय क्षेत्र वा मिति जानकारी बिना "पर्खाल घडी" समयको सामान्य उदाहरण हुन सक्छन्। टेम्पोरलका केही मुख्य विशेषताहरू समावेश छन्:
मितिहरू सहित वा बिना समयहरू। एक अस्थायी वस्तुले निर्दिष्ट मितिमा एक निश्चित समय, वा कुनै मिति जानकारी बिनाको समयलाई प्रतिनिधित्व गर्न सक्छ। एक निश्चित मिति, समय बिना, पनि प्रतिनिधित्व गर्न सकिन्छ। समय क्षेत्र समर्थन। अस्थायी वस्तुहरू पूर्ण रूपमा समय क्षेत्र सचेत छन् र विभिन्न समय क्षेत्रहरूमा रूपान्तरण गर्न सकिन्छ। क्षणले समय क्षेत्रहरूलाई पनि समर्थन गर्दछ, तर यसको लागि अतिरिक्त क्षण-समय क्षेत्र पुस्तकालय चाहिन्छ। अपरिवर्तनीयता। एक पटक टेम्पोरल वस्तु सिर्जना भएपछि, यसलाई परिवर्तन गर्न सकिँदैन। समय अंकगणित वा समय क्षेत्र रूपान्तरणले अन्तर्निहित वस्तु परिमार्जन गर्दैन। यसको सट्टा, तिनीहरूले नयाँ टेम्पोरल वस्तु उत्पन्न गर्छन्। १-आधारित अनुक्रमणिका। मिति API (साथै पलको साथ) मा बगहरूको साझा स्रोत भनेको महिनाहरू शून्य-अनुक्रमणिका हुन्छन्। यसको मतलब यो हो कि जनवरी महिना 0 हो, महिना 1 को सट्टा हामी सबैले वास्तविक जीवनमा बुझ्दछौं। टेम्पोरलले यसलाई १-आधारित अनुक्रमणिका प्रयोग गरेर फिक्स गर्दछ — जनवरी महिना १ हो। यो ब्राउजरमा निर्मित छ। टेम्पोरल ब्राउजरमा नै एपीआई भएको हुनाले, यसले तपाईंको एप्लिकेसनको बन्डल साइजमा केही थप्दैन।
यो नोट गर्न पनि महत्त्वपूर्ण छ कि मिति API टाढा जाँदैछ। टेम्पोरलले यस API लाई हटाउँदा, यसलाई हटाइएको वा बहिष्कार गरिएको छैन। ब्राउजरहरूले अचानक मिति API हटाएमा धेरै अनुप्रयोगहरू तोडिनेछन्। यद्यपि, यो पनि ध्यानमा राख्नुहोस् कि पल अब मर्मत मोडमा लिगेसी परियोजना मानिन्छ। बाँकी लेखमा, हामी नयाँ टेम्पोरल API मा पल-आधारित कोड माइग्रेट गर्नका लागि केही "रेसिपीहरू" हेर्नेछौं। रिफ्याक्टर सुरु गरौं! मिति र समय वस्तुहरू सिर्जना गर्दै हामीले मिति र समयहरू हेरफेर गर्न सक्नु अघि, हामीले तिनीहरूलाई प्रतिनिधित्व गर्ने वस्तुहरू सिर्जना गर्नुपर्छ। हालको मिति र समय प्रतिनिधित्व गर्ने क्षण वस्तु सिर्जना गर्न, क्षण प्रकार्य प्रयोग गर्नुहोस्। const now = क्षण(); console.log(अब); // क्षण<2026-02-18T21:26:29-05:00>
यो वस्तु अब आवश्यकता अनुसार ढाँचा वा हेरफेर गर्न सकिन्छ।
// UTC मा रूपान्तरण गर्नुहोस् //चेतावनी: यसले Moment वस्तुलाई परिवर्तन गर्छ र UTC मोडमा राख्छ! console.log(now.utc()); // क्षण<2026-02-19T02:26:29Z>
// ढाँचा गरिएको स्ट्रिङ छाप्नुहोस् - नोट गर्नुहोस् कि यो अहिले UTC समय प्रयोग गरिरहेको छ console.log(now.format('MM/DD/YYYY hh:mm:ss a')); // ०२/१९/२०२६ ०२:२७:०७ बजे
Moment को बारे मा याद गर्न को लागी मुख्य कुरा यो हो कि एक क्षण वस्तु मा सधैं समय र मिति बारे जानकारी समावेश गर्दछ। यदि तपाइँ केवल समय जानकारी संग काम गर्न आवश्यक छ भने, यो सामान्यतया ठीक छ, तर यसले डेलाइट बचत समय वा छलांग वर्ष जस्ता परिस्थितिहरूमा अप्रत्याशित व्यवहार निम्त्याउन सक्छ, जहाँ मितिले समय गणनामा प्रभाव पार्न सक्छ। टेम्पोरल अधिक लचिलो छ। तपाईंले Temporal.Instant वस्तु सिर्जना गरेर हालको मिति र समय प्रतिनिधित्व गर्ने वस्तु सिर्जना गर्न सक्नुहुन्छ। यसले "द इपोक" (जनवरी 1, 1970 मा मध्यरात UTC) को समय द्वारा परिभाषित समय मा एक बिन्दु प्रतिनिधित्व गर्दछ। टेम्पोरलले नानोसेकेन्ड-स्तर परिशुद्धताको साथ समयमा यो तत्काल सन्दर्भ गर्न सक्छ। const now = Temporal.Now.instant();
// युगदेखि कच्चा नानोसेकेन्डहरू हेर्नुहोस् console.log(now.epochNanoseconds); // 1771466342612000000n
// UTC को लागि ढाँचा console.log(now.toString()); // 2026-02-19T01:55:27.844Z
// एक विशेष समय क्षेत्र को लागी ढाँचा console.log(now.toString({ timeZone: 'America/New_York' })); // 2026-02-18T20:56:57.905-05:00
Temporal.Instant वस्तुहरू पनि स्थिर विधि प्रयोग गरेर निश्चित समय र मितिको लागि सिर्जना गर्न सकिन्छ।
const myInstant = Temporal.Instant.from('2026-02-18T21:10:00-05:00');
// स्थानीय समय क्षेत्रमा तत्काल ढाँचा गर्नुहोस्। ध्यान दिनुहोस् कि यसले मात्र नियन्त्रण गर्छ // ढाँचा - यसले वस्तु परिवर्तन गर्दैन जस्तै moment.utc गर्छ। console.log(myInstant.toString({ timeZone: 'America/New_York' })); // 2026-02-18T21:10:00-05:00
तपाईले अन्य प्रकारका टेम्पोरल वस्तुहरू पनि सिर्जना गर्न सक्नुहुन्छ, जसमा:
Temporal.PlainDate: कुनै समय जानकारी बिनाको मिति। Temporal.PlainTime: मिति जानकारी बिनाको समय। Temporal.ZonedDateTime: निश्चित समय क्षेत्रमा मिति र समय।
यी मध्ये प्रत्येकसँग मिति र/वा समय, वा पार्स गर्नको लागि मिति स्ट्रिङ निर्दिष्ट गर्ने वस्तुसँग कल गर्न सकिने विधि हुन्छ। // केवल एक मिति const today = Temporal.PlainDate.from({ वर्ष: 2026, महिना: 2, // हामीले फेब्रुअरीको लागि 2 प्रयोग गर्दैछौं दिन: 18 }); console.log(today.toString()); // २०२६-०२-१८
// केवल एक समय const lunchTime = Temporal.PlainTime.from({ घण्टा: 12 }); console.log(lunchTime.toString()); // १२:००:००
// संयुक्त राज्य अमेरिकाको पूर्वी समय क्षेत्रमा मिति र समय const dueAt = Temporal.ZonedDateTime.from({ समय क्षेत्र: 'अमेरिका/न्यूयोर्क', वर्ष: 2026, महिना : ३, दिन: १, घण्टा: 12, मिनेट: ०, दोस्रो: ० }); console.log(dueAt.toString()); // 2026-03-01T12:00:00-05:00[अमेरिका/न्यूयोर्क]
पार्सिङ हामीले मिति र समय जानकारीको प्रोग्रामेटिक सिर्जनालाई कभर गरेका छौं। अब पार्सिङ हेरौं। पार्सिङ एउटा क्षेत्र हो जहाँ बिल्ट-इन टेम्पोरल API भन्दा पल अधिक लचिलो छ। तपाइँ पल प्रकार्यमा पास गरेर मिति स्ट्रिङ पार्स गर्न सक्नुहुन्छ। एकल तर्कको साथ, Moment ले ISO मिति स्ट्रिङको अपेक्षा गर्दछ, तर यदि तपाईंले प्रयोग भइरहेको मिति ढाँचा निर्दिष्ट गर्ने दोस्रो तर्क प्रदान गर्नुभयो भने तपाईंले वैकल्पिक ढाँचाहरू प्रयोग गर्न सक्नुहुन्छ।
const isoDate = moment('2026-02-21T09:00:00'); const formattedDate = moment('2/21/26 9:00:00', 'M/D/YY h:mm:ss');
console.log(isoDate); // क्षण<2026-02-21T09:00:00-05:00>
console.log(formattedDate); // क्षण<2026-02-21T09:00:00-05:00>
पुरानो संस्करणहरूमा, Moment ले कुनै पनि मनपरी ढाँचा गरिएको मिति स्ट्रिङलाई पार्स गर्नको लागि उत्तम अनुमान लगाउनेछ। यसले अप्रत्याशित परिणामहरू निम्त्याउन सक्छ। उदाहरणका लागि, ०२-०३-२०२६ फेब्रुअरी २ वा मार्च ३ हो? यस कारणले गर्दा, Moment को नयाँ संस्करणहरूले ISO ढाँचाबद्ध मिति स्ट्रिङ बिना कल गरिएको खण्डमा प्रख्यात ह्रास चेतावनी प्रदर्शन गर्दछ (जबसम्म इच्छित ढाँचाको साथ दोस्रो तर्क पनि दिइएको छैन)। टेम्पोरलले विशेष रूपमा ढाँचा गरिएको मिति स्ट्रिङलाई मात्र पार्स गर्नेछ। स्ट्रिङ ISO 8601 ढाँचा वा यसको विस्तार, RFC 9557 सँग अनुरूप हुनुपर्छ। यदि एक गैर-अनुपालन मिति स्ट्रिङ विधिबाट पास भयो भने, Temporal ले RangeError फ्याँक्नेछ।
// RFC 9557 मिति स्ट्रिङ प्रयोग गर्दै const myDate = Temporal.Instant.from('2026-02-21T09:00:00-05:00[America/New_York]'); console.log(myDate.toString({ timeZone: 'America/New_York' })); // 2026-02-21T09:00:00-05:00
// अज्ञात मिति स्ट्रिङ प्रयोग गर्दै const otherDate = Temporal.Instant.from('2/21/26 9:00:00'); // RangeError: अस्थायी त्रुटि: वर्ष मान पार्स गर्दा अमान्य वर्ण।
मिति स्ट्रिङको सही आवश्यकताहरू तपाइँले सिर्जना गरिरहनुभएको टेम्पोरल वस्तुमा निर्भर गर्दछ। माथिको उदाहरणमा, Temporal.Instant लाई पूर्ण ISO चाहिन्छ8601 वा RFC 9557 मिति स्ट्रिङले समय क्षेत्र अफसेटको साथ मिति र समय निर्दिष्ट गर्दछ, तर तपाईंले मिति ढाँचाको केवल एक उपसेट प्रयोग गरेर PlainDate वा PlainTime वस्तुहरू पनि सिर्जना गर्न सक्नुहुन्छ। const myDate = Temporal.PlainDate.from('2026-02-21'); console.log(myDate.toString()); // २०२६-०२-२१
const myTime = Temporal.PlainTime.from('09:00:00'); console.log(myTime.toString()); // ०९:००:००
याद गर्नुहोस् कि यी स्ट्रिङहरूले अझै पनि अपेक्षित ढाँचाको पालना गर्नुपर्छ, वा त्रुटि फ्याँकिनेछ।
// गैर-अनुपालित समय स्ट्रिङहरू प्रयोग गर्दै। यी सबैले दायरा त्रुटि फ्याँक्नेछ। Temporal.PlainTime.from('9:00'); Temporal.PlainTime.from('9:00:00 AM');
प्रो टिप: गैर-ISO स्ट्रिङहरू ह्यान्डल गर्ने किनभने टेम्पोरलले विश्वसनीयतालाई प्राथमिकता दिन्छ, यसले 02-01-2026 जस्तो स्ट्रिङको ढाँचा अनुमान गर्ने प्रयास गर्दैन। यदि तपाइँको डेटा स्रोतले त्यस्ता स्ट्रिङहरू प्रयोग गर्दछ भने, तपाइँले Temporal सँग प्रयोग गर्न प्रयास गर्नु अघि 2026-02-01 जस्तै ISO स्ट्रिङमा मानहरूलाई पुन: व्यवस्थित गर्न केही स्ट्रिङ हेरफेर गर्न आवश्यक छ।
ढाँचा एकचोटि तपाइँसँग एक क्षण वा अस्थायी वस्तु छ, तपाइँ सायद यसलाई कुनै बिन्दुमा ढाँचाबद्ध स्ट्रिङमा रूपान्तरण गर्न चाहानुहुन्छ। यो एक उदाहरण हो जहाँ पल अलि बढी संक्षिप्त छ। तपाईले वस्तुको ढाँचा विधिलाई टोकनहरूको स्ट्रिङको साथ कल गर्नुहुन्छ जसले इच्छित मिति ढाँचा वर्णन गर्दछ। const date = moment();
console.log(date.format('MM/DD/YYYY')); // ०२/२२/२०२६
console.log(date.format('MMMM Do YYYY, h:mm:ss a')); // फेब्रुअरी 22, 2026, 8:18:30 अपराह्न
अर्कोतर्फ, टेम्पोरलले तपाईलाई अलि बढी भब्यताको आवश्यकता छ। टेम्पोरल वस्तुहरू, जस्तै तत्काल, एउटा toLocaleString विधि हुन्छ जसले वस्तुको गुणहरूको रूपमा निर्दिष्ट गरिएका विभिन्न ढाँचा विकल्पहरू स्वीकार गर्दछ।
const date = Temporal.Now.instant();
// कुनै तर्क बिना, हामी हालको लोकेलको लागि पूर्वनिर्धारित ढाँचा प्राप्त गर्नेछौं console.log(date.toLocaleString()); // 2/22/2026, 8:23:36 PM (en-US को लोकेल मान्दै)
// अनुकूल ढाँचा स्ट्रिङ उत्पन्न गर्न ढाँचा विकल्पहरू पास गर्नुहोस् console.log(date.toLocaleString('en-US', { महिना: 'लामो', दिन: 'संख्यात्मक', वर्ष: 'संख्यात्मक', घण्टा: '2-अंक', मिनेट: '२ अंक' })); // फेब्रुअरी २२, २०२६ बेलुका ८:२३ बजे
// ढाँचा स्ट्रिङमा तपाईले चाहानु भएको क्षेत्रहरू मात्र पास गर्नुहोस् console.log(date.toLocaleString('en-US', { महिना: 'छोटो', दिन: 'संख्यात्मक' })); // फेब्रुअरी २२
टेम्पोरल मिति ढाँचाले वास्तवमा हुड अन्तर्गत Intl.DateTimeFormat API (जुन पहिले नै आधुनिक ब्राउजरहरूमा सजिलै उपलब्ध छ) प्रयोग गर्दछ। यसको मतलब तपाइँ तपाइँको अनुकूलन ढाँचा विकल्पहरु संग पुन: प्रयोज्य DateTimeFormat वस्तु सिर्जना गर्न सक्नुहुन्छ, त्यसपछि टेम्पोरल वस्तुहरूलाई यसको ढाँचा विधिमा पास गर्नुहोस्। यसको कारणले, यसले अनुकूल मिति ढाँचाहरूलाई समर्थन गर्दैन जस्तै Moment ले गर्छ। यदि तपाइँलाई 'Q1 2026' वा अन्य विशेष ढाँचा जस्तै केहि चाहिन्छ भने, तपाइँलाई केहि अनुकूलन मिति ढाँचा कोड चाहिन्छ वा तेस्रो-पक्ष पुस्तकालयको लागि पुग्न सक्छ। const formatter = new Intl.DateTimeFormat('en-US', { महिना: '2-अंक', दिन: '2-अंक', वर्ष: 'संख्यात्मक' });
const date = Temporal.Now.instant(); console.log(formatter.format(date)); // ०२/२२/२०२६
क्षणको ढाँचा टोकनहरू लेख्न सजिलो छ, तर तिनीहरू स्थानीय-अनुकूल छैनन्। ढाँचा स्ट्रिङ "हार्ड कोड" चीजहरू जस्तै महिना/दिन क्रम। कन्फिगरेसन वस्तु प्रयोग गर्ने फाइदा, जस्तै टेम्पोरलले गर्छ, यो स्वचालित रूपमा कुनै पनि लोकेलमा अनुकूलन हुनेछ र सही ढाँचा प्रयोग गर्दछ। const date = Temporal.Now.instant();
const formatOptions = { महिना: 'संख्यात्मक', दिन: 'संख्यात्मक', वर्ष: 'संख्यात्मक' };
console.log(date.toLocaleString('en-US', formatOptions)); // २/२२/२०२६
console.log(date.toLocaleString('en-GB', formatOptions)); // २२/०२/२०२६
मिति गणना धेरै अनुप्रयोगहरूमा, तपाईंले मितिमा केही गणनाहरू प्रदर्शन गर्न आवश्यक पर्दछ। तपाईले समयको एकाइहरू (दिन, घण्टा, सेकेन्ड, आदि) थप्न वा घटाउन सक्नुहुन्छ। उदाहरणका लागि, यदि तपाइँसँग हालको मिति छ भने, तपाइँ प्रयोगकर्तालाई अब देखि 1 हप्ताको मिति देखाउन सक्नुहुन्छ। पल वस्तुहरूसँग यी कार्यहरू गर्ने थप र घटाउने विधिहरू छन्। यी प्रकार्यहरूले मान र एकाइ लिन्छन्, उदाहरणका लागि: add(7, 'days')। Moment र Temporal बीचको एक धेरै महत्त्वपूर्ण भिन्नता, तथापि, यी मिति गणनाहरू प्रदर्शन गर्दा, अन्तर्निहित वस्तु परिमार्जन गरिएको छ र यसको मूल मान हराएको छ। const now = क्षण();
console.log(अब); // क्षण<2026-02-24T20:08:36-05:00>
const nextWeek = now.add(7, 'days'); console.log(अर्को हप्ता); // क्षण<2026-03-03T20:08:36-05:00>
// Gotcha - मूल वस्तु उत्परिवर्तित थियो console.log(अब); // क्षण<2026-03-03T20:08:36-05:00>
मूल मिति गुमाउनबाट बच्नको लागि, तपाईंले प्रतिलिपि सिर्जना गर्न मोमेन्ट वस्तुमा क्लोन कल गर्न सक्नुहुन्छ। const अहिले= क्षण(); const nextWeek = now.clone().add(7, 'days');
console.log(अब); // क्षण<2026-02-24T20:12:55-05:00>
console.log(अर्को हप्ता); // क्षण<2026-03-03T20:12:55-05:00>
अर्कोतर्फ, टेम्पोरल वस्तुहरू अपरिवर्तनीय छन्। एकचोटि तपाईंले तत्काल, PlainDate, र यस्तै वस्तु सिर्जना गर्नुभयो, त्यो वस्तुको मूल्य कहिल्यै परिवर्तन हुनेछैन। टेम्पोरल वस्तुहरूमा पनि थप र घटाउने विधिहरू छन्। टेम्पोरल कुन वस्तु प्रकारहरूमा समय एकाइहरू थप्न सकिन्छ भन्ने बारे थोरै छनौट छ। उदाहरणका लागि, तपाईंले तत्काल दिनहरू थप्न सक्नुहुन्न:
const now = Temporal.Now.instant(); const nextWeek = now.add ({ days: 7 }); // RangeError: अस्थायी त्रुटि: सबैभन्दा ठूलो एकाइ मिति एकाइ हुन सक्दैन
यो किनभने तत्काल वस्तुहरूले UTC मा समय मा एक विशिष्ट बिन्दु प्रतिनिधित्व गर्दछ र क्यालेन्डर-अज्ञेयवादी छन्। किनभने डेलाइट सेभिङ टाइम जस्ता समय क्षेत्र नियमहरूको आधारमा दिनको लम्बाइ परिवर्तन हुन सक्छ, यो गणना तत्कालमा उपलब्ध हुँदैन। तथापि, तपाईले यो कार्य अन्य प्रकारका वस्तुहरूमा गर्न सक्नुहुन्छ, जस्तै PlainDateTime: const now = Temporal.Now.plainDateTimeISO(); console.log(now.toLocaleString()); // 2/24/2026, 8:23:59 PM
const nextWeek = now.add ({ days: 7 });
// ध्यान दिनुहोस् कि मूल PlainDateTime अपरिवर्तित रहन्छ console.log(now.toLocaleString()); // 2/24/2026, 8:23:59 PM
console.log(nextWeek.toLocaleString()); // ३/३/२०२६, ८:२३:५९ अपराह्न
तपाईले दुई पल वा टेम्पोरल वस्तुहरू बीच कति समय छ भनेर पनि गणना गर्न सक्नुहुन्छ। Moment's diff प्रकार्यको साथ, तपाईंले ग्रेन्युलेरिटीको लागि एकाइ प्रदान गर्न आवश्यक छ, अन्यथा यसले मिलिसेकेन्डमा भिन्नता फर्काउनेछ। const date1 = क्षण('2026-02-21T09:00:00'); const date2 = क्षण('2026-02-22T10:30:00');
console.log(date2.diff(date1)); // 91800000
console.log(date2.diff(date1, 'days')); // १
टेम्पोरल वस्तुसँग यो गर्नको लागि, तपाईले अर्को टेम्पोरल वस्तुलाई यसको सम्म वा पछि विधिहरूमा पास गर्न सक्नुहुन्छ। यसले समयको भिन्नताको बारेमा जानकारी समावेश गर्ने Temporal.Duration वस्तु फर्काउँछ। अवधि वस्तुमा भिन्नताको प्रत्येक कम्पोनेन्टका लागि गुणहरू छन्, र यसले समय भिन्नतालाई प्रतिनिधित्व गर्ने ISO 8601 अवधि स्ट्रिङ पनि उत्पन्न गर्न सक्छ।
const date1 = Temporal.PlainDateTime.from('2026-02-21T09:00:00'); const date2 = Temporal.PlainDateTime.from('2026-02-22T10:30:00');
// largeUnit ले प्रतिनिधित्व गर्ने समयको सबैभन्दा ठूलो एकाइ निर्दिष्ट गर्दछ // अवधि गणनामा const diff = date2.since(मिति1, {सबैभन्दा ठूलो इकाई: 'दिन'});
console.log(diff.days); // १
console.log(diff.hours); // १
console.log(diff.minutes); // ३०
console.log(diff.toString()); // P1DT1H30M // (ISO 8601 अवधि स्ट्रिङ: 1 दिन, 1 घण्टा, 30 मिनेट)
मिति र समय तुलना क्षण र टेम्पोरल दुबैले तपाइँलाई मिति र समयहरू तुलना गर्न दिन्छ जुन अर्को भन्दा पहिले आउँछ, तर API सँग फरक दृष्टिकोणहरू लिनुहोस्। Moment ले दुई Moment वस्तुहरू तुलना गर्न isBefore, isAfter, र isSame जस्ता विधिहरू प्रदान गर्दछ। const date1 = क्षण('2026-02-21T09:00:00'); const date2 = क्षण('2026-02-22T10:30:00');
console.log(date1.isBefore(date2)); // सत्य
टेम्पोरलले एउटै प्रकारका दुई वस्तुहरू बीच तुलना गर्न स्थिर तुलना विधि प्रयोग गर्दछ। यदि पहिलो मिति दोस्रो भन्दा अगाडि आयो भने -1, बराबर भएमा 0, वा पहिलो मिति दोस्रो पछि आयो भने 1 फर्काउँछ। निम्न उदाहरणले दुई PlainDate वस्तुहरू कसरी तुलना गर्ने भनेर देखाउँछ। Temporal.PlainDate.compare मा दुवै तर्कहरू PlainDate वस्तुहरू हुनुपर्छ।
const date1 = Temporal.PlainDate.from ({ वर्ष: 2026, महिना: 2, दिन: 24 }); const date2 = Temporal.PlainDate.from ({ वर्ष: 2026, महिना: 3, दिन: 24 });
// date1 मिति2 भन्दा पहिले आउँछ, त्यसैले -1 console.log(Temporal.PlainDate.compare(date1, date2));
// त्रुटि यदि हामीले फरक प्रकारका दुई वस्तुहरू तुलना गर्ने प्रयास गर्छौं console.log(Temporal.PlainDate.compare(date1, Temporal.Now.instant())); // TypeError: अस्थायी त्रुटि: अमान्य PlainDate क्षेत्रहरू प्रदान गरियो।
विशेष गरी, यसले क्रोनोलोजिकल रूपमा टेम्पोरल वस्तुहरूको एर्रे क्रमबद्ध गर्न सजिलो बनाउँछ। // Temporal.PlainDate वस्तुहरूको एर्रे const मिति = [...];
// तुलनाकर्ता प्रकार्यको रूपमा Temporal.PlainDate.compare प्रयोग गर्नुहोस् dates.sort(Temporal.PlainDate.compare);
समय क्षेत्र रूपान्तरण कोर पल पुस्तकालयले समय क्षेत्र रूपान्तरणहरूलाई समर्थन गर्दैन। यदि तपाईंलाई यो कार्यक्षमता चाहिन्छ भने, तपाईंले क्षण-समय क्षेत्र प्याकेज पनि स्थापना गर्न आवश्यक छ। यो प्याकेज रूख-हल्लाउन योग्य छैन, र त्यसैले तपाईंको बन्डल आकारमा उल्लेखनीय रूपमा थप्न सक्छ। एकचोटि तपाईंले क्षण-समय क्षेत्र स्थापना गर्नुभयो, तपाईंले tz विधिको साथ पल वस्तुहरूलाई विभिन्न समय क्षेत्रहरूमा रूपान्तरण गर्न सक्नुहुन्छ। अन्य पल अपरेसनहरू जस्तै, यसले अन्तर्निहित परिवर्तन गर्दछवस्तु। // यूएस पूर्वी समय मान्दै const now = क्षण(); console.log(अब); // क्षण<2026-02-28T20:08:20-05:00>
// प्यासिफिक समयमा रूपान्तरण गर्नुहोस्। // मूल पूर्वी समय हराएको छ। now.tz('America/Los_Angeles'); console.log(अब); // क्षण<2026-02-28T17:08:20-08:00>
Temporal.ZonedDateTime वस्तु प्रयोग गर्दा समय क्षेत्र कार्यक्षमता Temporal API मा निर्मित हुन्छ। यी वस्तुहरूमा withTimeZone विधि समावेश हुन्छ जसले नयाँ ZonedDateTime समयको उही क्षणलाई प्रतिनिधित्व गर्दछ, तर निर्दिष्ट समय क्षेत्रमा। // फेरि, यूएस पूर्वी समय मान्दै const now = Temporal.Now.zonedDateTimeISO(); console.log(now.toLocaleString()); // 2/28/2026, 8:12:02 PM EST
// प्यासिफिक समयमा रूपान्तरण गर्नुहोस् const nowPacific = now.withTimeZone('America/Los_Angeles'); console.log(nowPacific.toLocaleString()); // 2/28/2026, 5:12:02 PM PST
// मूल वस्तु अपरिवर्तित रहन्छ console.log(now.toLocaleString()); // 2/28/2026, 8:12:02 PM EST
नोट: toLocaleString द्वारा फर्काइएका ढाँचा गरिएका मानहरू, नामले जस्तै, लोकेल-निर्भर हुन्। नमूना कोड en-US लोकेलमा विकसित गरिएको थियो, त्यसैले ढाँचा यस्तो छ: 2/28/2026, 5:12:02 PM PST। अर्को स्थानमा, यो फरक हुन सक्छ। उदाहरणका लागि, en-GB लोकेलमा, तपाईंले 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';
// १. प्रयोगकर्ताको समय क्षेत्रमा प्रारम्भिक क्षण सिर्जना गर्नुहोस् const eventTime = moment.tz( inputString, moment.ISO_8601, // ISO 8601 string अपेक्षा गर्नुहोस् सत्य, // कडा पार्सिङ userTimeZone );
// यदि inputString ले मान्य मिति प्रतिनिधित्व गर्दैन भने त्रुटि फ्याँक्नुहोस् यदि (!eventTime.isValid()) { नयाँ त्रुटि फेंक ('अमान्य मिति/समय इनपुट'); }
// 2. लक्ष्य समय गणना गर्नुहोस् // क्रिटिकल: हामीले क्लोन गर्नुपर्छ, वा 'घटना समय' सदाको लागि परिवर्तन हुन्छ! const targetTime = eventTime.clone().tz(targetTimeZone);
फिर्ता { स्थानीय: eventTime.format(timeFormat), लक्ष्य: targetTime.format(timeFormat), }; }
const तालिका = getEventTimes ( '२०२६-०३-०५T१५:००-०५:००', 'अमेरिका/न्यूयोर्क', 'युरोप/लन्डन', );
console.log(schedule.local); // मार्च 5, 2026, 3:00:00 अपराह्न EST
console.log(schedule.target); // मार्च 5, 2026, 8:00:00 PM GMT
यस उदाहरणमा, हामी ISO 8601 को अपेक्षित मिति ढाँचा प्रयोग गर्दैछौं, जुन सहयोगी रूपमा Moment मा निर्मित छ। हामी कडा पार्सिङ पनि प्रयोग गर्दैछौं, जसको मतलब मोमेन्टले ढाँचासँग मेल नखाने मिति स्ट्रिङसँग अनुमान लगाउने प्रयास गर्दैन। यदि गैर-ISO मिति स्ट्रिङ पास भयो भने, यसले अमान्य मिति वस्तुको परिणाम दिन्छ, र हामी त्रुटि फ्याँक्छौं। टेम्पोरल कार्यान्वयन समान देखिन्छ, तर केहि मुख्य भिन्नताहरू छन्।
प्रकार्य getEventTimes(inputString, userTimeZone, targetTimeZone) { // 1. इनपुटलाई सिधै इन्स्ट्यान्टमा पार्स गर्नुहोस्, त्यसपछि सिर्जना गर्नुहोस् // प्रयोगकर्ताको क्षेत्रमा एक ZonedDateTime। const instant = Temporal.Instant.from(inputString); const eventTime = instant.toZonedDateTimeISO(userTimeZone);
// २. लक्ष्य क्षेत्रमा रूपान्तरण गर्नुहोस् // यसले स्वचालित रूपमा नयाँ वस्तु फर्काउँछ; 'घटना समय' सुरक्षित छ। const targetTime = eventTime.withTimeZone(targetTimeZone);
// 3. Intl प्रयोग गरी ढाँचा (बिल्ट-इन) const विकल्प = { वर्ष: 'संख्यात्मक', महिना: 'छोटो', दिन: 'संख्यात्मक', घण्टा: 'संख्यात्मक', मिनेट: '२ अंक', दोस्रो: '२ अंक', timeZoneName: 'छोटो' };
फिर्ता { स्थानीय: eventTime.toLocaleString(navigator.language, options), लक्ष्य: targetTime.toLocaleString(navigator.language, options) }; }
const तालिका = getEventTimes ( '२०२६-०३-०५T१५:००-०५:००', 'अमेरिका/न्यूयोर्क', 'युरोप/लन्डन', );
console.log(schedule.local); // मार्च 5, 2026, 3:00:00 PM EST
console.log(schedule.target); // मार्च 5, 2026, 8:00:00 PM GMT
क्षणको साथ, हामीले परिणाम मिति स्ट्रिङहरूको लागि स्पष्ट रूपमा ढाँचा स्ट्रिङ निर्दिष्ट गर्नुपर्छ। प्रयोगकर्ताको स्थान वा लोकेल जस्तोसुकै भए पनि, घटना समयहरू सधैं मार्च 5, 2026, 3:00:00 को रूपमा ढाँचामा हुनेछन्।अपरान्ह EST। साथै, हामीले स्पष्ट रूपमा अपवाद फ्याँक्नु पर्दैन। यदि अमान्य स्ट्रिङ Temporal.Instant.from मा पास भयो भने, Temporal ले हाम्रो लागि अपवाद फ्याँक्नेछ। नोट गर्नको लागि एउटा कुरा यो हो कि कडा पार्सिंगको साथ पनि, मोमेन्ट संस्करण अझै धेरै उदार छ। टेम्पोरललाई स्ट्रिङको अन्त्यमा समय क्षेत्र अफसेट चाहिन्छ। तपाईंले यो पनि ध्यान दिनुपर्छ कि हामीले navigator.language प्रयोग गरिरहँदा, यो कोड ब्राउजरको वातावरणमा मात्र चल्नेछ, किनकि नेभिगेटर Node.js वातावरणमा परिभाषित गरिएको छैन। टेम्पोरल कार्यान्वयनले ब्राउजरको हालको लोकेल (navigator.language) प्रयोग गर्दछ, त्यसैले प्रयोगकर्ताले स्वचालित रूपमा घटना समयहरू तिनीहरूको स्थानीय समय ढाँचामा प्राप्त गर्नेछन्। en-US लोकेलमा, यो 5 मार्च, 2026, 3:00:00 बजे EST हो। यद्यपि, यदि प्रयोगकर्ता लन्डनमा छ भने, उदाहरणका लागि, घटना समय 5 मार्च 2026, 15:00:00 GMT-5 को रूपमा फर्म्याट गरिनेछ। सारांश
कार्य Moment.js अस्थायी वर्तमान समय क्षण() Temporal.Now.zonedDateTimeISO() पार्सिंग ISO क्षण(str) Temporal.Instant.from(str) समय थप्नुहोस् .add(7, 'days') (mutates) थप्नुहोस् ({ दिन: 7 }) (नयाँ वस्तु) फरक फरक (अन्य, 'घण्टा') .देखि (अन्य) घण्टा समय क्षेत्र .tz('जोन/नाम') .WithTimeZone('क्षेत्र/नाम')
पहिलो नजरमा, भिन्नता थोरै फरक हुन सक्छ (र टेम्पोरलको मामलामा, कहिलेकाँही धेरै शब्दहरू र थप कडा) वाक्य रचना, तर त्यहाँ Moment.js मा टेम्पोरल प्रयोग गर्ने धेरै मुख्य फाइदाहरू छन्:
अधिक स्पष्ट हुनु भनेको कम आश्चर्य र अनपेक्षित बगहरू हो। पल अधिक उदार देखिन सक्छ, तर यसले "अनुमान कार्य" समावेश गर्दछ जुन कहिलेकाहीं गलत मितिहरूमा परिणाम हुन सक्छ। यदि तपाईंले टेम्पोरललाई अमान्य केही दिनुभयो भने, यसले त्रुटि फ्याँक्छ। यदि कोड चल्छ भने, तपाईंलाई थाहा छ तपाईंले वैध मिति पाउनुभएको छ। क्षणले अनुप्रयोगको बन्डलमा महत्त्वपूर्ण आकार थप्न सक्छ, विशेष गरी यदि तपाइँ क्षण-समयक्षेत्र प्याकेज प्रयोग गर्दै हुनुहुन्छ। टेम्पोरलले केहि पनि थप्दैन (एक पटक यो तपाइँको लक्षित ब्राउजरहरूमा पठाइन्छ)। अपरिवर्तनीयताले तपाईंलाई मिति रूपान्तरण र अपरेशनहरू प्रदर्शन गर्दा डेटा गुमाउने वा ओभरराइट गर्ने छैन भन्ने विश्वास दिन्छ। समयका विभिन्न प्रतिनिधित्वहरू (तत्काल, PlainDateTime, ZonedDateTime) तपाईंको आवश्यकताहरूमा निर्भर गर्दछ, जहाँ Moment सधैं UTC टाइमस्ट्याम्पको वरिपरि र्यापर हुन्छ। टेम्पोरलले मिति ढाँचाको लागि Intl APIs प्रयोग गर्दछ, जसको मतलब तपाईंसँग टोकनहरू स्पष्ट रूपमा निर्दिष्ट नगरिकन स्थानीय-सचेत ढाँचा हुन सक्छ।
Polyfill मा टिप्पणीहरू पहिले उल्लेख गरिए अनुसार, त्यहाँ टेम्पोरल पोलिफिल उपलब्ध छ, @js-temporal/polyfill नामक npm प्याकेजको रूपमा वितरित। यदि तपाइँ आज टेम्पोरल प्रयोग गर्न चाहानुहुन्छ भने, तपाइँलाई सफारी जस्ता ब्राउजरहरूलाई समर्थन गर्न यो पोलिफिल चाहिन्छ जसले API लाई हालसम्म पठाएको छैन। यससँग नराम्रो खबर यो हो कि यसले तपाईंको बन्डल साइजमा थप्नेछ। सुसमाचार यो हो कि यसले अझै पल वा क्षण-समय क्षेत्र भन्दा धेरै कम थप्छ। यहाँ Bundlephobia.com द्वारा रिपोर्ट गरिएको बन्डल आकारहरूको तुलना छ, npm प्याकेज आकारहरूमा जानकारी प्रस्तुत गर्ने वेबसाइट (Bundlephobia विश्लेषण हेर्न प्रत्येक प्याकेजको नाममा क्लिक गर्नुहोस्):
प्याकेज मिनिफाइड मिनिफाइड र gzipped @js-temporal/polyfill १५४.१ kB ४४.१ kB क्षण २९४.४ kB ७५.४ kB क्षण-समय क्षेत्र १ MB 114.2 kB
पोलिफिलसँग ऐतिहासिक रूपमा मेमोरी प्रयोगको वरिपरि केही प्रदर्शन समस्याहरू छन्, र लेखनको समयमा, यो अल्फा अवस्थामा मानिन्छ। यसको कारणले गर्दा, तपाईले यसलाई उत्पादनमा प्रयोग गर्न चाहनुहुन्न जबसम्म यो अझ परिपक्व अवस्थामा पुग्दैन। अर्को सुसमाचार यो हो कि आशा छ कि पोलिफिल धेरै लामो समय सम्म आवश्यक पर्दैन (जबसम्म तपाइँ पुराना ब्राउजरहरूलाई समर्थन गर्न आवश्यक छैन, अवश्य पनि)। लेख्ने समयमा, टेम्पोरलले क्रोम, एज, र फायरफक्समा पठाएको छ। यो सफारीमा अझै तयार छैन, यद्यपि यो नवीनतम टेक्नोलोजी पूर्वावलोकनमा रनटाइम फ्ल्यागको साथ उपलब्ध देखिन्छ।