JavaScript मध्ये लिहिलेले जवळजवळ कोणत्याही प्रकारचे अनुप्रयोग काही प्रमाणात वेळा किंवा तारखांसह कार्य करते. सुरुवातीला, हे अंगभूत तारीख APIपुरते मर्यादित होते. या API मध्ये मूलभूत कार्यक्षमतेचा समावेश आहे, परंतु ते काय करू शकते ते मर्यादित आहे. Moment.js सारख्या तृतीय-पक्ष लायब्ररी आणि नंतर अंगभूत API जसे की Intl API आणि नवीन टेम्पोरल API, वेळ आणि तारखांसह कार्य करण्यासाठी अधिक लवचिकता जोडतात. Moment.js चा उदय आणि पतन Moment.js ही एक JavaScript लायब्ररी आहे ज्यामध्ये वेळ आणि तारखांसह कार्य करण्यासाठी शक्तिशाली उपयुक्तता आहेत. यामध्ये मूलभूत तारीख API मधील गहाळ वैशिष्ट्ये समाविष्ट आहेत, जसे की टाइम झोन मॅनिपुलेशन, आणि अनेक सामान्य ऑपरेशन्स सुलभ करते. मोमेंटमध्ये तारखा आणि वेळा स्वरूपित करण्यासाठी कार्ये देखील समाविष्ट आहेत. हे विविध अनुप्रयोगांमध्ये मोठ्या प्रमाणावर वापरले जाणारे लायब्ररी बनले. तथापि, मोमेंटला देखील समस्यांचा वाटा होता. ही एक मोठी लायब्ररी आहे आणि अनुप्रयोगाच्या बंडल आकारात लक्षणीय वाढ करू शकते. लायब्ररी ट्री शेकिंगला सपोर्ट करत नाही (आधुनिक बंडलर्सचे वैशिष्ट्य जे लायब्ररीचे न वापरलेले भाग काढून टाकू शकते), तुम्ही फक्त एक किंवा दोन फंक्शन्स वापरत असलात तरीही संपूर्ण मोमेंट लायब्ररी समाविष्ट केली जाते. मोमेंटची आणखी एक समस्या ही आहे की ते तयार केलेल्या वस्तू बदलण्यायोग्य आहेत. मोमेंट ऑब्जेक्टवर काही फंक्शन्स कॉल केल्याने साइड इफेक्ट्स होतात आणि त्या ऑब्जेक्टचे मूल्य बदलते. यामुळे अनपेक्षित वर्तन किंवा बग होऊ शकतात. 2020 मध्ये, मोमेंटच्या देखभालकर्त्यांनी लायब्ररी देखभाल मोडमध्ये ठेवण्याचा निर्णय घेतला. कोणतेही नवीन वैशिष्ट्य विकसित केले जात नाही आणि देखभाल करणाऱ्यांनी ते नवीन प्रकल्पांसाठी वापरण्याविरुद्ध शिफारस केली आहे. इतर JavaScript तारीख लायब्ररी आहेत, जसे की date-fns, परंतु शहरात एक नवीन प्लेअर आहे, एक API थेट JavaScript मध्ये तयार केला आहे: Temporal. हे एक नवीन मानक आहे जे मूळ तारीख API च्या छिद्रांमध्ये भरते तसेच Moment आणि इतर लायब्ररींमध्ये आढळलेल्या काही मर्यादांचे निराकरण करते. टेम्पोरल म्हणजे काय? टेम्पोरल हे ECMAScript मानकामध्ये जोडले जाणारे नवीन वेळ आणि तारीख API आहे, जे आधुनिक JavaScript परिभाषित करते. मार्च 20266 पर्यंत, ते TC39 प्रक्रियेच्या स्टेज 4 वर पोहोचले आहे (जावास्क्रिप्ट भाषेतील प्रस्ताव आणि जोडण्यांवर देखरेख करणारी समिती), आणि ECMAScript तपशीलाच्या पुढील आवृत्तीमध्ये समाविष्ट केली जाईल. हे आधीच अनेक ब्राउझरमध्ये लागू केले गेले आहे: Chrome 144+ आणि Firefox 139+, Safari लवकरच फॉलो करेल अशी अपेक्षा आहे. एक पॉलीफिल असमर्थित ब्राउझर आणि Node.js साठी देखील उपलब्ध आहे. टेम्पोरल एपीआय अशा वस्तू तयार करते जे साधारणपणे, वेळेतील क्षणांचे प्रतिनिधित्व करते. हे दिलेल्या टाइम झोनमध्ये पूर्ण-वेळ आणि तारखेचे स्टॅम्प असू शकतात किंवा ते कोणत्याही टाइम झोन किंवा तारीख माहितीशिवाय "वॉल क्लॉक" वेळेचे सामान्य उदाहरण असू शकतात. टेम्पोरलच्या काही मुख्य वैशिष्ट्यांमध्ये हे समाविष्ट आहे:

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

हे लक्षात घेणे देखील महत्त्वाचे आहे की Date API निघून जात नाही. टेम्पोरल या API ची जागा घेत असताना, ते काढले जात नाही किंवा बहिष्कृत केले जात नाही. ब्राउझरने अचानक Date API काढून टाकल्यास अनेक अनुप्रयोग खंडित होतील. तथापि, हे देखील लक्षात ठेवा की मोमेंट आता देखभाल मोडमध्ये एक वारसा प्रकल्प मानला जातो. उर्वरित लेखात, आम्ही क्षण-आधारित कोड नवीन टेम्पोरल API मध्ये स्थलांतरित करण्यासाठी काही "पाककृती" पाहू. चला रिफॅक्टरिंग सुरू करूया! तारीख आणि वेळ ऑब्जेक्ट्स तयार करणे आम्ही तारखा आणि वेळा हाताळण्याआधी, आम्हाला त्यांचे प्रतिनिधित्व करणाऱ्या वस्तू तयार कराव्या लागतील. वर्तमान तारीख आणि वेळ दर्शविणारी मोमेंट ऑब्जेक्ट तयार करण्यासाठी, मोमेंट फंक्शन वापरा. const now = moment(); console.log(आता); // क्षण<2026-02-18T21:26:29-05:00>

हे ऑब्जेक्ट आता आवश्यकतेनुसार स्वरूपित किंवा हाताळले जाऊ शकते.

// UTC मध्ये रूपांतरित करा //चेतावणी: हे मोमेंट ऑब्जेक्टला बदलते आणि UTC मोडमध्ये ठेवते! console.log(now.utc()); // क्षण<2026-02-19T02:26:29Z>

// स्वरूपित स्ट्रिंग मुद्रित करा - लक्षात ठेवा की ते आता UTC वेळ वापरत आहे console.log(now.format('MM/DD/YYYY hh:mm:ss a')); // 02/19/2026 02:27:07 am

मोमेंटबद्दल लक्षात ठेवण्याची महत्त्वाची गोष्ट म्हणजे मोमेंट ऑब्जेक्टमध्ये नेहमी वेळ आणि तारखेची माहिती समाविष्ट असते. जर तुम्हाला फक्त वेळेच्या माहितीसह कार्य करण्याची आवश्यकता असेल, तर हे सहसा ठीक आहे, परंतु यामुळे डेलाइट सेव्हिंग टाइम किंवा लीप वर्ष सारख्या परिस्थितींमध्ये अनपेक्षित वर्तन होऊ शकते, जेथे तारखेचा वेळेच्या गणनेवर परिणाम होऊ शकतो. टेम्पोरल अधिक लवचिक आहे. तुम्ही 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

फ्रॉम स्टॅटिक पद्धत वापरून टेम्पोरल.इन्स्टंट ऑब्जेक्ट्स विशिष्ट वेळ आणि तारखेसाठी देखील तयार केल्या जाऊ शकतात.

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

// स्थानिक टाइम झोनमध्ये झटपट फॉरमॅट करा. लक्षात घ्या की हे फक्त नियंत्रित करते // फॉरमॅटिंग - ते क्षण.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()); // 2026-02-18

// फक्त एक वेळ const lunchTime = Temporal.PlainTime.from({ तास: 12 }); console.log(lunchTime.toString()); // 12:00:00

// यूएस ईस्टर्न टाइम झोनमधील तारीख आणि वेळ const dueAt = Temporal.ZonedDateTime.from({ टाइमझोन: 'अमेरिका/न्यूयॉर्क', वर्ष: 2026, महिना: 3, दिवस: 1, तास: 12, मिनिट: 0, दुसरा: 0 }); console.log(dueAt.toString()); // 2026-03-01T12:00:00-05:00[अमेरिका/न्यूयॉर्क]

पार्सिंग आम्ही तारीख आणि वेळ माहितीची प्रोग्रामेटिक निर्मिती कव्हर केली आहे. आता पार्सिंग पाहू. पार्सिंग हे एक क्षेत्र आहे जेथे अंगभूत टेम्पोरल API पेक्षा मोमेंट अधिक लवचिक आहे. तुम्ही तारखेची स्ट्रिंग क्षण फंक्शनमध्ये पास करून पार्स करू शकता. एका युक्तिवादासह, मोमेंटला 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 सर्वोत्तम अंदाज लावेल. यामुळे अप्रत्याशित परिणाम होऊ शकतात. उदाहरणार्थ, ०२-०३-२०२६ फेब्रुवारी २ की मार्च ३? या कारणास्तव, मोमेंटच्या नवीन आवृत्त्या ISO स्वरूपित तारीख स्ट्रिंगशिवाय कॉल केल्यास (जोपर्यंत इच्छित स्वरूपासह दुसरा युक्तिवाद देखील दिला जात नाही तोपर्यंत) ठळक अवमूल्यन चेतावणी प्रदर्शित करते. टेम्पोरल केवळ विशिष्ट स्वरूपित तारीख स्ट्रिंग पार्स करेल. स्ट्रिंग ISO 8601 फॉरमॅट किंवा त्याच्या विस्तार, RFC 9557 शी सुसंगत असणे आवश्यक आहे. जर अनुरूप नसलेली तारीख स्ट्रिंग अ फ्रॉम पद्धतीने पास केली गेली, तर टेम्पोरल रेंजएरर टाकेल.

// 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'); // रेंजएरर: टेम्पोरल एरर: वर्ष मूल्य पार्स करताना अवैध वर्ण.

डेट स्ट्रिंगच्या नेमक्या आवश्यकता तुम्ही कोणत्या प्रकारच्या टेम्पोरल ऑब्जेक्ट तयार करत आहात यावर अवलंबून असतात. वरील उदाहरणात, Temporal.Instant ला संपूर्ण ISO आवश्यक आहे8601 किंवा RFC 9557 तारीख स्ट्रिंग टाइम झोन ऑफसेटसह तारीख आणि वेळ निर्दिष्ट करते, परंतु तुम्ही फक्त तारीख स्वरूपाचा एक उपसंच वापरून PlainDate किंवा PlainTime ऑब्जेक्ट्स देखील तयार करू शकता. const myDate = Temporal.PlainDate.from('2026-02-21'); console.log(myDate.toString()); // 2026-02-21

const myTime = Temporal.PlainTime.from('09:00:00'); console.log(myTime.toString()); // 09:00:00

लक्षात ठेवा की या स्ट्रिंग्सने अद्याप अपेक्षित स्वरूपाचे पालन करणे आवश्यक आहे, अन्यथा एक त्रुटी फेकली जाईल.

// एक गैर-अनुपालक वेळ तार वापरणे. हे सर्व रेंजएरर टाकतील. Temporal.PlainTime.from('9:00'); Temporal.PlainTime.from('9:00:00 AM');

प्रो टीप: नॉन-ISO स्ट्रिंग्स हाताळणे कारण टेम्पोरल विश्वासार्हतेला प्राधान्य देते, ते 02-01-2026 सारख्या स्ट्रिंगच्या स्वरूपाचा अंदाज लावण्याचा प्रयत्न करणार नाही. तुमचा डेटा स्रोत अशा स्ट्रिंग्स वापरत असल्यास, टेम्पोरलसह वापरण्याचा प्रयत्न करण्यापूर्वी तुम्हाला 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

दुसरीकडे, टेम्पोरलसाठी तुम्ही थोडे अधिक शब्दशः असणे आवश्यक आहे. टेम्पोरल ऑब्जेक्ट्स, जसे की Instant, मध्ये 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-अंकी', मिनिट: '2-अंकी' })); // 22 फेब्रुवारी 2026 रोजी रात्री 8:23 वाजता

// फॉरमॅट स्ट्रिंगमध्ये तुम्हाला हवे असलेले फील्ड पास करा console.log(date.toLocaleString('en-US', { महिना: 'लहान', दिवस: 'संख्यात्मक' })); // 22 फेब्रुवारी

टेम्पोरल डेट फॉरमॅटिंग प्रत्यक्षात Intl.DateTimeFormat API (जे आधुनिक ब्राउझरमध्ये सहज उपलब्ध आहे) वापरते. याचा अर्थ तुम्ही तुमच्या सानुकूल स्वरूपन पर्यायांसह पुन्हा वापरता येण्याजोगा DateTimeFormat ऑब्जेक्ट तयार करू शकता, त्यानंतर टेम्पोरल ऑब्जेक्ट्स त्याच्या स्वरूपन पद्धतीमध्ये पास करू शकता. यामुळे, ते Moment सारख्या सानुकूल तारीख स्वरूपनास समर्थन देत नाही. तुम्हाला 'Q1 2026' किंवा इतर विशेष फॉरमॅटिंग सारखे काहीतरी हवे असल्यास, तुम्हाला काही कस्टम डेट फॉरमॅटिंग कोड किंवा तृतीय-पक्ष लायब्ररीपर्यंत पोहोचण्याची आवश्यकता असू शकते. const formatter = नवीन 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)); // 2/22/2026

console.log(date.toLocaleString('en-GB', formatOptions)); // 22/02/2026

तारखेची गणना बऱ्याच ऍप्लिकेशन्समध्ये, तुम्हाला तारखेला काही गणिते पूर्ण करणे आवश्यक आहे. तुम्ही वेळेची एकके (दिवस, तास, सेकंद इ.) जोडू किंवा वजा करू शकता. उदाहरणार्थ, तुमच्याकडे सध्याची तारीख असल्यास, तुम्ही वापरकर्त्याला आतापासून 1 आठवड्याची तारीख दाखवू शकता. मोमेंट ऑब्जेक्ट्समध्ये या ऑपरेशन्स करणाऱ्या बेरीज आणि वजाबाकीसारख्या पद्धती असतात. ही कार्ये मूल्य आणि एकक घेतात, उदाहरणार्थ: add(7, 'days'). मोमेंट आणि टेम्पोरलमधील एक अतिशय महत्त्वाचा फरक, तथापि, ही तारीख गणना करताना, अंतर्निहित ऑब्जेक्ट सुधारित केला जातो आणि त्याचे मूळ मूल्य गमावले जाते. const now = moment();

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>

दुसरीकडे, टेम्पोरल वस्तू अपरिवर्तनीय असतात. एकदा तुम्ही इन्स्टंट, प्लेनडेट इत्यादीसारखी एखादी वस्तू तयार केली की, त्या वस्तूचे मूल्य कधीही बदलणार नाही. टेम्पोरल ऑब्जेक्ट्समध्ये देखील बेरीज आणि वजा पद्धती असतात. कोणत्या ऑब्जेक्ट प्रकारात कोणती वेळ एकके जोडली जाऊ शकतात याबद्दल टेम्पोरल थोडेसे निवडक आहे. उदाहरणार्थ, तुम्ही झटपट दिवस जोडू शकत नाही:

const now = Temporal.Now.instant(); const nextWeek = now.add({ days: 7 }); // रेंजएरर: टेम्पोरल एरर: सर्वात मोठे युनिट तारीख युनिट असू शकत नाही

याचे कारण असे की झटपट वस्तू 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()); // ३/३/२०२६, रात्री ८:२३:५९

तुम्ही दोन क्षण किंवा टेम्पोरल ऑब्जेक्ट्समध्ये किती वेळ आहे हे देखील मोजू शकता. मोमेंटच्या डिफ फंक्शनसह, तुम्हाला ग्रॅन्युलॅरिटीसाठी एक युनिट प्रदान करणे आवश्यक आहे, अन्यथा ते मिलिसेकंदांमध्ये फरक परत करेल. const date1 = moment('2026-02-21T09:00:00'); const date2 = moment('2026-02-22T10:30:00');

console.log(date2.diff(date1)); // 91800000

console.log(date2.diff(date1, 'days')); // १

टेम्पोरल ऑब्जेक्टसह हे करण्यासाठी, तुम्ही दुसरी टेम्पोरल ऑब्जेक्ट त्याच्या पर्यंत किंवा नंतरच्या पद्धतींमध्ये पास करू शकता. हे एक टेम्पोरल. कालावधी ऑब्जेक्ट मिळवते ज्यामध्ये वेळेतील फरकाची माहिती असते. कालावधी ऑब्जेक्टमध्ये फरकाच्या प्रत्येक घटकासाठी गुणधर्म आहेत आणि वेळेतील फरक दर्शविणारी 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(date1, { large Unit: 'day' });

console.log(diff.days); // १

console.log(diff.hours); // १

console.log(diff.minutes); // ३०

console.log(diff.toString()); // P1DT1H30M // (ISO 8601 कालावधी स्ट्रिंग: 1 दिवस, 1 तास, 30 मिनिटे)

तारखा आणि वेळेची तुलना करणे क्षण आणि टेम्पोरल दोन्ही तुम्हाला तारखा आणि वेळेची तुलना करू देतात जे दुसऱ्याच्या आधी येते हे निर्धारित करण्यासाठी, परंतु API सह भिन्न दृष्टीकोन घ्या. मोमेंट दोन मोमेंट ऑब्जेक्ट्सची तुलना करण्यासाठी isBefore, isAfter आणि isSame या पद्धती प्रदान करते. const date1 = moment('2026-02-21T09:00:00'); const date2 = moment('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 date2 च्या आधी येतो, म्हणून -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 = moment(); 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 ऑब्जेक्ट वापरताना टाइम झोन कार्यक्षमता टेम्पोरल 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 द्वारे परत केलेली फॉरमॅट केलेली मूल्ये, नावाप्रमाणेच, लोकॅल-आश्रित आहेत. नमुना कोड एन-यूएस लोकॅलमध्ये विकसित करण्यात आला होता, त्यामुळे त्याचे स्वरूप असे आहे: 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';

// 1. वापरकर्त्याच्या टाइम झोनमध्ये प्रारंभिक क्षण तयार करा const eventTime = moment.tz( इनपुटस्ट्रिंग, moment.ISO_8601, // ISO 8601 स्ट्रिंगची अपेक्षा करा खरे, // कठोर पार्सिंग userTimeZone );

// इनपुटस्ट्रिंगने वैध तारखेचे प्रतिनिधित्व केले नसल्यास त्रुटी फेकून द्या जर (!eventTime.isValid()) { नवीन त्रुटी टाका ('अवैध तारीख/वेळ इनपुट'); }

// 2. लक्ष्य वेळेची गणना करा // गंभीर: आपण क्लोन केले पाहिजे किंवा 'इव्हेंटटाइम' कायमचा बदलला पाहिजे! const targetTime = eventTime.clone().tz(targetTimeZone);

परत स्थानिक: eventTime.format(timeFormat), लक्ष्य: targetTime.format(timeFormat), }; }

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

console.log(schedule.local); // 5 मार्च 2026, दुपारी 3:00:00 EST

console.log(schedule.target); // 5 मार्च, 2026, रात्री 8:00:00 GMT

या उदाहरणात, आम्ही ISO 8601 चे अपेक्षित तारीख स्वरूप वापरत आहोत, जे मोमेंटमध्ये उपयुक्तपणे अंगभूत आहे. आम्ही कठोर पार्सिंग देखील वापरत आहोत, याचा अर्थ Moment तारीख स्ट्रिंगसह अंदाज लावण्याचा प्रयत्न करणार नाही जी फॉरमॅटशी जुळत नाही. नॉन-ISO तारीख स्ट्रिंग पास केल्यास, त्याचा परिणाम अवैध तारीख ऑब्जेक्ट होईल आणि आम्ही एक त्रुटी टाकतो. टेम्पोरल अंमलबजावणी सारखीच दिसते, परंतु त्यात काही महत्त्वाचे फरक आहेत.

फंक्शन getEventTimes(inputString, userTimeZone, targetTimeZone) { // 1. इनपुट थेट झटपट मध्ये पार्स करा, नंतर तयार करा // वापरकर्त्याच्या झोनमध्ये एक ZonedDateTime. const instant = Temporal.Instant.from(inputString); const eventTime = instant.toZonedDateTimeISO(userTimeZone);

// 2. लक्ष्य क्षेत्रामध्ये रूपांतरित करा // हे आपोआप नवीन ऑब्जेक्ट परत करते; 'इव्हेंटटाइम' सुरक्षित आहे. const targetTime = eventTime.withTimeZone(targetTimeZone);

// 3. Intl वापरून फॉरमॅट (अंगभूत) const पर्याय = { वर्ष: 'संख्यात्मक', महिना: 'लहान', दिवस: 'संख्यात्मक', तास: 'संख्यात्मक', मिनिट: '2-अंकी', दुसरा: '2-अंकी', timeZoneName: 'लहान' };

परत स्थानिक: eventTime.toLocaleString(navigator.language, पर्याय), लक्ष्य: targetTime.toLocaleString(navigator.language, पर्याय) }; }

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

console.log(schedule.local); // 5 मार्च, 2026, दुपारी 3:00:00 EST

console.log(schedule.target); // 5 मार्च 2026, 8:00:00 PM GMT

Moment सह, आम्हाला परिणामी तारीख स्ट्रिंगसाठी स्पष्टपणे एक फॉरमॅट स्ट्रिंग निर्दिष्ट करावी लागेल. वापरकर्त्याचे स्थान किंवा लोकॅल काहीही असो, इव्हेंटच्या वेळा नेहमी 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, 'दिवस') (परिवर्तन) .add({ दिवस: 7 }) (नवीन ऑब्जेक्ट) फरक .diff(इतर, 'तास') .पासून(इतर).तास टाइम झोन .tz('झोन/नाव') .WithTimeZone('झोन/नाव')

पहिल्या दृष्टीक्षेपात, फरक थोडा वेगळा असू शकतो (आणि टेम्पोरलच्या बाबतीत, काहीवेळा अधिक शब्दशः आणि अधिक कठोर) वाक्यरचना, परंतु Moment.js वर टेम्पोरल वापरण्याचे अनेक प्रमुख फायदे आहेत:

अधिक स्पष्ट असणे म्हणजे कमी आश्चर्य आणि अनपेक्षित बग. क्षण अधिक उदार वाटू शकतो, परंतु त्यात "अंदाज" समाविष्ट आहे, ज्याचा परिणाम काहीवेळा चुकीच्या तारखांमध्ये होऊ शकतो. तुम्ही टेम्पोरलला काहीतरी अवैध दिल्यास, ते एरर टाकते. कोड चालू असल्यास, तुम्हाला माहिती आहे की तुम्हाला वैध तारीख मिळाली आहे. क्षण अनुप्रयोगाच्या बंडलमध्ये लक्षणीय आकार जोडू शकतो, विशेषतः जर तुम्ही क्षण-टाइमझोन पॅकेज वापरत असाल. टेम्पोरल काहीही जोडत नाही (एकदा ते आपल्या लक्ष्यित ब्राउझरमध्ये पाठवले की). अपरिवर्तनीयता तुम्हाला आत्मविश्वास देते की तारीख रूपांतरणे आणि ऑपरेशन्स करत असताना तुम्ही कधीही डेटा गमावणार नाही किंवा ओव्हरराईट करणार नाही. तुमच्या आवश्यकतेनुसार वेळेचे वेगवेगळे प्रतिनिधित्व (इन्स्टंट, प्लेनडेटटाइम, झोनडेटटाइम), जेथे क्षण नेहमी UTC टाइमस्टॅम्पभोवती रॅपर असतो. टेम्पोरल तारीख फॉरमॅटिंगसाठी Intl APIs वापरते, याचा अर्थ तुम्ही टोकन्स स्पष्टपणे नमूद न करता लोकॅल-अवेअर फॉरमॅटिंग करू शकता.

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

पॅकेज मिनिफाइड लहान आणि gzipped @js-temporal/polyfill 154.1 kB 44.1 kB क्षण 294.4 kB 75.4 kB क्षण-टाइमझोन 1 MB 114.2 kB

पॉलीफिलमध्ये ऐतिहासिकदृष्ट्या मेमरी वापराभोवती काही कार्यप्रदर्शन समस्या होत्या आणि लेखनाच्या वेळी, ते अल्फा स्थितीत असल्याचे मानले जाते. यामुळे, जोपर्यंत ते अधिक परिपक्व स्थितीत पोहोचत नाही तोपर्यंत तुम्ही ते उत्पादनात वापरू इच्छित नाही. दुसरी चांगली बातमी अशी आहे की पॉलीफिलची जास्त वेळ गरज भासणार नाही (जोपर्यंत तुम्हाला जुन्या ब्राउझरला समर्थन देण्याची गरज नाही तोपर्यंत). लेखनाच्या वेळी, टेम्पोरल क्रोम, एज आणि फायरफॉक्समध्ये पाठवले गेले आहे. हे अद्याप सफारीमध्ये पूर्णपणे तयार नाही, जरी ते नवीनतम तंत्रज्ञान पूर्वावलोकनावर रनटाइम फ्लॅगसह उपलब्ध असल्याचे दिसते.

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