په جاواسکریپټ کې لیکل شوي نږدې هر ډول غوښتنلیک په ځینې ظرفیت کې د وخت یا نیټې سره کار کوي. په پیل کې، دا د جوړ شوي نیټې API پورې محدود و. پدې API کې لومړني فعالیت شامل دی ، مګر په هغه څه کې خورا محدود دی چې دا کولی شي. د دریمې ډلې کتابتونونه لکه Moment.js، او وروسته جوړ شوي APIs لکه Intl APIs او نوي Temporal API، د وخت او نیټې سره کار کولو کې خورا لوی انعطاف اضافه کوي. د Moment.js عروج او زوال Moment.js د جاواسکریپټ کتابتون دی چې د وخت او نیټې سره کار کولو لپاره د ځواکمنو اسانتیاوو سره. پدې کې د لومړني نیټې API څخه ورک شوي ځانګړتیاوې شاملې دي، لکه د وخت زون لاسوهنه، او ډیری عام عملیات ساده کوي. لحظه د نیټو او وختونو فارمیټ کولو لپاره افعال هم شامل دي. دا په ډیری مختلف غوښتنلیکونو کې په پراخه کچه کارول شوي کتابتون شو. په هرصورت، لمحې هم د مسلو برخه درلوده. دا یو لوی کتابتون دی، او کولی شي د غوښتنلیک بنډل اندازې کې د پام وړ اضافه کړي. ځکه چې کتابتون د ونې ټکولو ملاتړ نه کوي (د عصري بنډلونو یوه ځانګړتیا چې کولی شي د کتابتونونو نه کارول شوې برخې لرې کړي)، د مومینټ ټول کتابتون پکې شامل دی حتی که تاسو یوازې د هغې یو یا دوه دندې وکاروئ. د لمحې سره بله مسله دا حقیقت دی چې هغه شیان چې دا رامینځته کوي بدلون وړ دي. په یوه مومینټ څیز کې د ځینو افعالو غږول ضمني اغیزې لري او د هغه څیز ارزښت بدلوي. دا کولی شي د غیر متوقع چلند یا کیګونو لامل شي. په 2020 کې، د مومینټ ساتونکو پریکړه وکړه چې کتابتون د ساتنې حالت ته واړوي. د نوي فیچر پراختیا نه ده ترسره شوې، او ساتونکي د نویو پروژو لپاره د دې کارولو پروړاندې وړاندیز کوي. د جاوا سکریپټ نور کتابتونونه هم شتون لري، لکه date-fns، مګر په ښار کې یو نوی لوبغاړی شتون لري، یو API په مستقیم ډول په جاوا سکریپټ کې جوړ شوی: Temporal. دا یو نوی معیار دی چې د اصلي نیټې API سوري ډکوي او همدارنګه په Moment او نورو کتابتونونو کې موندل شوي ځینې محدودیتونه حل کوي. عارضي څه شی دی؟ Temporal یو نوی وخت او نیټه API ده چې د ECMAScript معیار کې اضافه کیږي، کوم چې عصري جاوا سکریپټ تعریفوي. د مارچ 20266 پورې، دا د TC39 پروسې 4 مرحلې ته رسیدلی (هغه کمیټه چې د جاواسکریپټ ژبې وړاندیزونه او اضافې نظارت کوي)، او د ECMAScript توضیحاتو په راتلونکې نسخه کې به شامل شي. دا لا دمخه په ډیری براوزرونو کې پلي شوی: کروم 144+ او فایرفوکس 139+، د سفاري سره تمه کیږي چې ډیر ژر تعقیب شي. یو پولیفیل د غیر ملاتړ شوي براوزرونو او Node.js لپاره هم شتون لري. Temporal API هغه شیان رامینځته کوي چې عموما په وخت کې د شیبو استازیتوب کوي. دا کیدای شي په ټاکل شوي وخت زون کې د بشپړ وخت او نیټې ټاپهونه وي، یا دا د "دیوال ساعت" وخت عمومي مثال کیدی شي پرته له کوم وخت زون یا نیټې معلوماتو. د Temporal ځینې اصلي ځانګړتیاوې عبارت دي له:
د نیټې سره یا پرته وختونه. یو لنډمهاله څیز کولی شي د یوې ټاکلې نیټې په اړه یو مشخص وخت استازیتوب وکړي، یا د کومې نیټې معلوماتو پرته وخت. یو مشخص نیټه، پرته له وخت څخه، هم استازیتوب کیدی شي. د وخت زون ملاتړ. عارضي توکي په بشپړ ډول د وخت زون خبر دي او په مختلف وخت زونونو کې تبادله کیدی شي. لمحه هم د وخت زونونو ملاتړ کوي ، مګر دا اضافي شیبه - وخت زون کتابتون ته اړتیا لري. بې ثباتي: یوځل چې یو لنډمهاله څیز رامینځته شي ، دا نشي بدلیدلی. د وخت ریاضي یا د وخت زون تبادلې اصلي څیز نه بدلوي. پرځای یې، دوی یو نوی عارضي اعتراض تولیدوي. 1-based indexing. د نیټې API سره د بګونو یوه عامه سرچینه (همدارنګه د مومینټ سره) دا ده چې میاشتې صفر شاخص شوي دي. دا پدې مانا ده چې د جنوري میاشت 0 ده، نه د 1 میاشتې په پرتله لکه څنګه چې موږ ټول په ریښتینې ژوند کې پوهیږو. لنډمهاله دا د 1-based indexing په کارولو سره حل کوي - د جنوري میاشت 1 ده. دا په براوزر کې جوړ شوی دی.ځکه چې ټیمپورل پخپله براوزر کې یو API دی، دا ستاسو د غوښتنلیک بنډل اندازې کې هیڅ شی نه اضافه کوي.
دا هم مهمه ده چې یادونه وکړو چې د نیټې API لیرې نه کیږي. په داسې حال کې چې Temporal د دې API ځای نیسي، دا نه لرې کیږي یا نه محرومیږي. ډیری غوښتنلیکونه به مات شي که براوزر ناڅاپه د نیټې 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 څیز په جوړولو سره یو څیز جوړ کړئ چې د اوسني نیټې او وخت استازیتوب کوي. دا د وخت یوه نقطه استازیتوب کوي چې د "عصر" راهیسې (د 1970 کال د جنوري په 1 نیمه شپه UTC) د وخت لخوا تعریف شوی. Temporal کولی شي دا سمدستي په وخت کې د نانوسیکنډ کچې دقت سره حواله کړي. 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({ کال: ۲۰۲۶ میاشت: 2، // یادونه موږ د فبروري لپاره 2 کاروو ورځ: ۱۸ }); 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({ د وخت زون: 'امریکا/نیویارک', کال: ۲۰۲۶ میاشت: ۳ ورځ: 1 ساعت: 12 دقیقه: 0, دوهم: 0 }); 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 به د هر ډول خپلمنځي بڼه شوي نیټې تار تحلیل کولو لپاره غوره اټکل وکړي. دا کولی شي غیر متوقع پایلې رامینځته کړي. د مثال په توګه، 02-03-2026 د فبروري 2 یا د مارچ 3 ده؟ د دې دلیل لپاره، د مومینټ نوې نسخې د پام وړ تخریب اخطار ښکاره کوي که چیرې دا د ISO فارمیټ شوي نیټې تار پرته ویل کیږي (مګر که د مطلوب شکل سره دوهم دلیل هم ورکړل شي). Temporal به یوازې د ځانګړي شکل شوي نیټې تار پارس کړي. تار باید د ISO 8601 فارمیټ یا د هغې توسیع، RFC 9557 سره مطابقت ولري. که چیرې د غیر مطابقت لرونکي نیټې تار له میتود څخه تیریږي، ټیمپورل به د RangeError وغورځوي.
// د RFC 9557 نیټې تار کارول const myDate = Temporal.Instant.from('2026-02-21T09:00:00-05:00[امریکا/نیو_یارک]'); 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()); // 2026-02-21
const myTime = Temporal.PlainTime.from('09:00:00'); console.log(myTime.toString()); // 09:00:00
په یاد ولرئ چې دا تارونه باید لاهم د تمه شوي فارمیټ سره مطابقت ولري، یا یوه تېروتنه به وغورځول شي.
// د غیر مطابقت لرونکي وخت تارونو کارول. دا ټول به د RangeError وغورځوي. Temporal.PlainTime.from('9:00'); Temporal.PlainTime.from('9:00:00 AM');
پرو لارښوونه: د غیر ISO تارونو اداره کول ځکه چې ټیمپورل اعتبار ته لومړیتوب ورکوي، دا به هڅه ونه کړي چې د تار بڼه اټکل کړي لکه 02-01-2026. که ستاسو د معلوماتو سرچینه دا ډول تارونه کاروي، نو تاسو به اړتیا ولرئ چې ارزښتونه د ISO تار کې تنظیم کړئ لکه 2026-02-01 مخکې له دې چې د Temporal سره د کارولو هڅه وکړئ.
شکل ورکول یوځل چې تاسو یو شیبه یا لنډمهاله څیز ولرئ ، تاسو شاید غواړئ دا په یو وخت کې فارمیټ شوي تار ته واړوئ. دا یوه بیلګه ده چیرې چې لمحه یو څه ډیر سخت دی. تاسو د توکیو د تار سره د اعتراض فارمیټ میتود ته زنګ ووهئ چې د مطلوب نیټې بڼه بیانوي. const date = moment();
console.log(date.format('MM/DD/YYYY')); // 02/22/2026
console.log(date.format('MMMM Do YYYY, h:mm:ss a')); // د ۲۰۲۶ کال د فبروري ۲۲، د ماښام ۸:۱۸:۳۰ بجې
له بلې خوا، Temporal تاسو ته اړتیا لري چې یو څه نور لفظي وي. لنډمهاله شیان، لکه Instant، د ToLocaleString طریقه لري چې د یو څیز د ملکیتونو په توګه مشخص شوي د فارمیټینګ مختلف انتخابونه مني.
const date = Temporal.Now.instant();
// پرته له کوم دلیل، موږ به د اوسني ځای لپاره ډیفالټ بڼه ترلاسه کړو console.log(date.toLocaleString()); // 2/22/2026، 8:23:36 PM (د امریکا د ځای ځای په غاړه اخیستل)
// د دودیز فارمیټ تار جوړولو لپاره د فارمیټ کولو اختیارونه پاس کړئ console.log(date.toLocaleString('en-US', { میاشت: 'اوږد', ورځ: عددي، کال: عددي، ساعت: '2 عدد', دقیقه: '2 عدد' })); // د فبروري 22، 2026 د ماښام 8:23 بجې
// یوازې هغه ساحې تیر کړئ چې تاسو یې د فارمیټ تار کې غواړئ console.log(date.toLocaleString('en-US', { میاشت: 'لنډ', ورځ: عددي })); // فبروري ۲۲
د لنډمهاله نیټې فارمیټ په حقیقت کې د هوډ لاندې Intl.DateTimeFormat API (کوم چې دمخه په عصري براوزرونو کې په اسانۍ سره شتون لري) کاروي. د دې معنی دا ده چې تاسو کولی شئ د خپل دودیز فارمیټ کولو اختیارونو سره د بیا کارونې وړ DateTimeFormat څیز رامینځته کړئ ، بیا د دې فارمیټ میتود ته عارضي توکي انتقال کړئ. د دې له امله ، دا د دودیز نیټې فارمیټونو ملاتړ نه کوي لکه مومینټ. که تاسو یو څه ته اړتیا لرئ لکه 'Q1 2026' یا نور ځانګړي فارمیټینګ، تاسو ممکن د دودیز نیټې فارمیټینګ کوډ ته اړتیا ولرئ یا د دریمې ډلې کتابتون ته ورسیږئ. const formatter = نوی Intl.DateTimeFormat('en-US', { میاشت: '2 عدد', ورځ: '2 عدد', کال: عددي });
const date = Temporal.Now.instant(); console.log(formatter.format(date)); // 02/22/2026
د مومینټ فارمیټینګ ټیکونه د لیکلو لپاره اسانه دي، مګر دوی د ځای سره دوستانه ندي. فارمیټ تارونه "سخت کوډ" شیان لکه د میاشتې / ورځې امر. د ترتیب کولو څیز کارولو ګټه، لکه څنګه چې Temporal کوي، دا دی چې دا به په اتوماتيک ډول د هرې ټاکل شوي ځای سره تطابق وکړي او سمه بڼه وکاروي. 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 اونۍ نیټه وښایاست. د مومینټ څیزونه میتودونه لري لکه اضافه او تخفیف چې دا عملیات ترسره کوي. دا افعال یو ارزښت او یو واحد اخلي، د بیلګې په توګه: اضافه کړئ (7، 'ورځو'). په هرصورت، د Moment او Temporal ترمنځ یو خورا مهم توپیر دا دی چې د دې نیټې محاسبې ترسره کولو په وخت کې، اصلي څیز بدلیږي او اصلي ارزښت یې له لاسه ورکوي. 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>
له بلې خوا، لنډمهاله شیان بدلیدونکي دي. یوځل چې تاسو یو شی رامینځته کړئ لکه سمدستي ، ساده نیټه ، او داسې نور ، د دې څیز ارزښت به هیڅکله بدل نشي. لنډمهاله شیان هم د اضافه او کمولو میتودونه لري. Temporal یو څه غوره دی چې د کوم وخت واحدونه د کوم شی ډولونو کې اضافه کیدی شي. د مثال په توګه، تاسو نشئ کولی په سمدستي کې ورځې اضافه کړئ:
const now = Temporal.Now.instant(); const nextWeek = now.add({ days:7}); // RangeError: لنډمهاله تېروتنه: لوی واحد د نیټې واحد نشي کیدی
دا ځکه چې سمدستي شیان په UTC کې د وخت په اوږدو کې یو مشخص ټکی څرګندوي او د کیلنڈر - اګنوسټیک دي. ځکه چې د ورځې اوږدوالی د وخت زون قواعدو پراساس بدلیدلی شي لکه د ورځې د ر lightا خوندي کولو وخت ، دا محاسبه په فوري کې شتون نلري. په هرصورت، تاسو کولی شئ دا عملیات په نورو ډولونو کې ترسره کړئ، لکه د 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()); // 3/3/2026، 8:23:59 PM
تاسو کولی شئ دا هم محاسبه کړئ چې د دوه لحظو یا عارضي شیانو ترمینځ څومره وخت دی. د Moment's diff فنکشن سره، تاسو اړتیا لرئ د ګرانولریت لپاره یو واحد چمتو کړئ، که نه نو دا به په ملی ثانیو کې توپیر بیرته راولي. 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')); // 1
د دې لپاره چې د یو ټیمپورل څیز سره ترسره شي، تاسو کولی شئ د دې تر وخته یا وروسته میتودونو ته بل ټیمپورل څیز انتقال کړئ. دا یو 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(date1, { لوی واحد: 'ورځ' });
console.log(diff.days); // 1
console.log(diff.hours); // 1
console.log(diff.minutes); // 30
console.log(diff.toString()); // P1DT1H30M // (ISO 8601 موده تار: 1 ورځ، 1 ساعت، 30 دقیقې)
د نیټو او وختونو پرتله کول لحظه او لنډمهاله دواړه تاسو ته اجازه درکوي چې نیټې او وختونه پرتله کړئ ترڅو معلومه کړئ چې کوم یو له بل څخه مخکې راځي، مګر د API سره مختلف طریقې واخلئ. Moment میتودونه وړاندې کوي لکه isBefore، isAfter، او isSame د دوو شیبو شیانو پرتله کولو لپاره. const date1 = moment('2026-02-21T09:00:00'); const date2 = moment('2026-02-22T10:30:00');
console.log(date1.isBefore(date2)); // ریښتیا
Temporal د ورته ډول دوه شیانو ترمنځ پرتله کولو لپاره د جامد پرتله کولو میتود کاروي. دا -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 = 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 API کې جوړ شوی کله چې د Temporal.ZonedDateTime څیز کاروي. په دې شیانو کې د وخت زون سره میتود شامل دی چې یو نوی 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
یادونه: د LocaleString لخوا بیرته راستانه شوي فارمیټ شوي ارزښتونه، لکه څنګه چې نوم معنی لري، په محلي پورې تړاو لري. د نمونې کوډ په 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';
// 1. د کارونکي وخت زون کې لومړنۍ شیبه جوړه کړئ const eventTime = moment.tz( inputString moment.ISO_8601، // د ISO 8601 تار تمه وکړئ ریښتیا، // سخت تحلیل د کارن وخت زون );
// یوه تېروتنه وغورځوئ که چیرې inputString د اعتبار وړ نیټې استازیتوب ونه کړي که (!eventTime.isValid()) { نوې تېروتنه اچول }
// 2. د هدف وخت محاسبه کړئ // انتقادي: موږ باید د تل لپاره کلون کړو، یا د پیښې وخت بدل کړو! const targetTime = eventTime.clone().tz(targetTimeZone);
بیرته { محلي: eventTime.format(time Format)، هدف: targetTime.format(time Format) }; }
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
په دې مثال کې، موږ د ISO 8601 د متوقع نیټې بڼه کاروو، کوم چې په مرسته سره په مومینټ کې جوړ شوی. موږ سخت تحلیل هم کوو ، پدې معنی چې لمحه به د نیټې تار سره اټکل کولو هڅه ونه کړي چې د فارمیټ سره سمون نه خوري. که چیرې د غیر ISO نیټې تار تیر شي، نو دا به د ناسم تاریخ اعتراض پایله ولري، او موږ یوه تېروتنه وغورځوو. د وخت پلي کول ورته ښکاري، مګر یو څو کلیدي توپیرونه لري.
فنکشن getEventTimes(inputString, userTimeZone, targetTimeZone) { // 1. آخذه په مستقیم ډول په فوري کې پارس کړئ، بیا یې جوړ کړئ // د کاروونکي په زون کې د زونډډیټ وخت. const instant = Temporal.Instant.from(inputString); const eventTime = instant.toZonedDateTimeISO(userTimeZone);
// 2. د هدف زون ته واړوئ // دا په اتوماتيک ډول یو نوی شی بیرته راګرځوي؛ د پیښې وخت خوندي دی. const targetTime = eventTime.withTimeZone(targetTimeZone)؛
// 3. د Intl په کارولو سره فارمیټ (جوړ شوی) const اختیارونه = { کال: عددي، میاشت: 'لنډ', ورځ: عددي، ساعت: عددي، دقیقه: '2 عدد', دوهم: '2 عدد'، د وخت زون نوم: 'لنډ' };
بیرته { محلي: eventTime.toLocaleString(navigator.language, options), هدف: targetTime.toLocaleString(navigator.language, options) }; }
const مهالویش = getEventTimes( '2026-03-05T15:00-05:00', 'امریکا/نیویارک', 'اروپا/لندن'، );
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 په توګه فارمیټ شيpm 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') .add({ ورځې: 7 }) (نوی څیز) توپیر توپیر (نور، 'ساعتونه') له (نورو) ساعتونو څخه د وخت زون .tz('زون/نوم') .withTimeZone('زون/نوم')
په لومړي نظر کې، توپیر ممکن یو څه توپیر ولري (او د Temporal په حالت کې، ځینې وختونه ډیر فعل او ډیر سخت) ترکیب، مګر د Moment.js په اړه د Temporal کارولو لپاره ډیری مهمې ګټې شتون لري:
ډیر روښانه کیدل پدې معنی دي چې لږ حیرانتیاوې او غیر ارادي کیګونه. شیبه ممکن ډیر نرم وي، مګر پدې کې "اټکل ورک" شامل دي، کوم چې ځینې وختونه د غلط نیټې پایله کیدی شي. که تاسو Temporal یو څه ناباوره ورکړئ، دا یوه تېروتنه اچوي. که کوډ چلیږي، تاسو پوهیږئ چې تاسو یو باوري نیټه لرئ. لمحه کولی شي د غوښتنلیک بنډل کې د پام وړ اندازه اضافه کړي ، په ځانګړي توګه که تاسو د شیبې وخت زون بسته کاروئ. لنډمهاله هیڅ شی نه اضافه کوي (یوځل چې دا ستاسو په نښه شوي براوزرونو کې لیږدول کیږي). بې ثباتي تاسو ته دا باور درکوي چې تاسو به هیڅکله د نیټې تبادلې او عملیاتو ترسره کولو پرمهال ډیټا له لاسه ورنکړي یا له لاسه ورنکړي. د وخت مختلف نمایشونه (انسټنټ، پلین ډیټ ټایم، زونډ ډیټ وخت) ستاسو د غوښتنو پورې اړه لري، چیرې چې لمحه تل د UTC مهال ویش شاوخوا پوښل کیږي. Temporal د نیټې فارمیټینګ لپاره Intl APIs کاروي، پدې معنی چې تاسو کولی شئ د ځای په اړه پوهه فارمیټ ولرئ پرته لدې چې په واضح ډول د ټوکن مشخص کړئ.
په Polyfill کې یادښتونه لکه څنګه چې مخکې یادونه وشوه، د ټیمپورل پولیفیل شتون لري، د npm کڅوړې په توګه ویشل شوی چې نوم یې @js-temporal/polyfill دی. که تاسو غواړئ نن ورځ ټیمپورل وکاروئ ، نو تاسو به د سفاري په څیر براوزرونو ملاتړ کولو لپاره دې پولیفیل ته اړتیا ولرئ چې تراوسه یې API ندي لیږلي. د دې سره بد خبر دا دی چې دا به ستاسو د بنډل اندازې ته اضافه کړي. ښه خبر دا دی چې دا لاهم د شیبې یا شیبې وخت زون څخه د پام وړ کم اضافه کوي. دلته د بنډل اندازې پرتله کول دي لکه څنګه چې د Bundlephobia.com لخوا راپور شوي، یوه ویب پاڼه چې د npm کڅوړې اندازې په اړه معلومات وړاندې کوي (د بنډل فوبیا تحلیل لیدلو لپاره د هرې بستې نوم باندې کلیک وکړئ):
بسته Minified کوچني او gzipped @js-temporal/polyfill 154.1 kB 44.1 kB شېبه 294.4 kB 75.4 kB شېبې وخت زون 1 MB 114.2 kB
پولیفیل هم په تاریخي ډول د حافظې کارولو په شاوخوا کې د فعالیت ځینې مسلې لري، او د لیکلو په وخت کې، دا په الفا حالت کې ګڼل کیږي. د دې له امله، تاسو ممکن نه غواړئ دا په تولید کې وکاروئ تر هغه چې دا ډیر بالغ حالت ته ورسیږي. بل ښه خبر دا دی چې امید دی چې پولیفیل به ډیر وخت ته اړتیا ونلري (مګر که تاسو اړتیا لرئ د زړو براوزرونو ملاتړ وکړئ ، البته). د لیکلو په وخت کې، ټیمپورل په کروم، ایج، او فایرفوکس کې لیږدول شوی. دا لاهم په سفاري کې بشپړ چمتو ندی ، که څه هم داسې ښکاري چې د وروستي ټیکنالوژۍ مخکتنې کې د چلولو وخت بیرغ سره شتون لري.