Қариб ҳама гуна замимаҳое, ки дар JavaScript навишта шудаанд, бо вақтҳо ё санаҳо бо иқтидори муайян кор мекунанд. Дар ибтидо, ин танҳо бо API-и дарунсохт маҳдуд буд. Ин API функсияҳои асосиро дар бар мегирад, аммо дар он чизе, ки карда метавонад, хеле маҳдуд аст. Китобхонаҳои тарафи сеюм ба монанди Moment.js ва баъдтар API-ҳои дарунсохт ба монанди APIs Intl ва API-и нави Temporal, барои кор бо вақт ва сана чандирии бештар илова мекунанд. Эҳё ва фурӯпошии Moment.js Moment.js китобхонаи JavaScript бо утилитҳои пурқувват барои кор бо вақтҳо ва санаҳо мебошад. Он дорои хусусиятҳои норасидаи API-и асосии сана, ба монанди коркарди минтақаи вақт ва бисёр амалиётҳои маъмулиро соддатар мекунад. Лаҳза инчунин функсияҳои форматкунии сана ва вақтҳоро дар бар мегирад. Он ба китобхонаи васеъ истифодашаванда дар барномаҳои гуногун табдил ёфт. Бо вуҷуди ин, Moment низ мушкилоти худро дошт. Ин китобхонаи калон аст ва метавонад ба андозаи бастаи барнома ба таври назаррас илова кунад. Азбаски китобхона ларзиши дарахтро пуштибонӣ намекунад (хусусияти бастаҳои муосир, ки қисмҳои истифоданашудаи китобхонаҳоро нест мекунанд), тамоми китобхонаи Moment дохил карда мешавад, ҳатто агар шумо танҳо як ё ду функсияи онро истифода баред. Мушкилоти дигар бо Moment ин аст, ки объектҳои эҷодкардаи он тағирёбанда мебошанд. Даъват кардани функсияҳои муайян дар объекти Moment таъсири тараф дорад ва арзиши он объектро мутатсия мекунад. Ин метавонад ба рафтори ғайричашмдошт ё хатогиҳо оварда расонад. Дар соли 2020, нигоҳдорони Moment тасмим гирифтанд, ки китобхонаро ба ҳолати нигоҳдорӣ гузоранд. Ягон хусусияти нав таҳия карда намешавад ва нигоҳдорон тавсия медиҳанд, ки онро барои лоиҳаҳои нав истифода набаранд. Дигар китобхонаҳои санаи JavaScript мавҷуданд, ба монанди date-fns, аммо дар шаҳр як бозигари нав мавҷуд аст, API мустақиман дар JavaScript сохта шудааст: Temporal. Ин як стандарти навест, ки сӯрохиҳои API-и аслии Date-ро пур мекунад ва инчунин баъзе маҳдудиятҳои дар Moment ва китобхонаҳои дигар мавҷудбударо ҳал мекунад. Муваққатӣ чист? Temporal як API-и нави вақт ва сана аст, ки ба стандарти ECMAScript илова карда мешавад, ки JavaScript-и муосирро муайян мекунад. То моҳи марти соли 20266, он ба марҳилаи 4-и раванди TC39 расид (кумите, ки пешниҳодҳо ва иловаҳоро ба забони JavaScript назорат мекунад) ва ба версияи навбатии мушаххасоти ECMAScript дохил карда мешавад. Он аллакай дар якчанд браузерҳо амалӣ карда шудааст: Chrome 144+ ва Firefox 139+ ва интизор меравад, ки Safari ба зудӣ пайравӣ кунад. A polyfill низ барои браузерҳои дастгирӣнашаванда ва Node.js дастрас аст. API Temporal объектҳоеро эҷод мекунад, ки одатан лаҳзаҳои вақтро ифода мекунанд. Инҳо метавонанд тамғаҳои пурраи вақт ва сана дар як минтақаи вақти муайян бошанд, ё онҳо метавонанд намунаи умумии вақти "соати деворӣ" бе ягон минтақаи вақт ё маълумоти сана бошанд. Баъзе аз хусусиятҳои асосии Temporal инҳоянд:

Вақтҳо бо ё бе санаҳо. Объекти муваққатӣ метавонад вақти мушаххасро дар санаи мушаххас ё вақтро бидуни ягон маълумоти сана нишон диҳад. Санаи мушаххасро бидуни вақт низ метавон муаррифӣ кард. Дастгирии минтақаи вақт. Объектҳои муваққатӣ аз минтақаи вақт комилан огоҳанд ва онҳоро дар минтақаҳои гуногуни вақт табдил додан мумкин аст. Лаҳза низ минтақаҳои вақтро дастгирӣ мекунад, аммо он китобхонаи иловагии минтақаи вақтро талаб мекунад. Тағирнопазирӣ. Пас аз сохтани объекти муваққатӣ, онро тағир додан мумкин нест. Табдилдиҳии арифметикии вақт ё минтақаи вақт объекти асосиро тағир намедиҳад. Ба ҷои ин, онҳо объекти нави муваққатиро тавлид мекунанд. Индексгузорӣ дар асоси 1. Манбаи умумии хатогиҳо бо Date API (инчунин бо Moment) ин аст, ки моҳҳо ба сифр индексатсия карда мешаванд. Ин маънои онро дорад, ки январ моҳи 0 аст, на моҳи 1, тавре ки ҳамаи мо дар ҳаёти воқеӣ мефаҳмем. Муваққатӣ инро бо истифода аз индексатсияи 1 асоснок ислоҳ мекунад - январ моҳи 1 аст. Он дар браузер сохта шудааст. Азбаски Temporal дар худи браузер API аст, он ба андозаи бастаи замимаи шумо чизе илова намекунад.

Инчунин қайд кардан муҳим аст, ки Date API аз байн намеравад. Ҳангоме ки Temporal ин API-ро иваз мекунад, он нест карда намешавад ё бекор карда намешавад. Бисёр барномаҳо вайрон мешаванд, агар браузерҳо ногаҳон Date API-ро хориҷ кунанд. Аммо, инчунин дар хотир доред, ки Moment ҳоло як лоиҳаи меросӣ дар ҳолати нигоҳдорӣ ҳисобида мешавад. Дар қисми боқимондаи мақола, мо баъзе "рецептҳо" -ро барои интиқоли коди дар асоси Moment ба API нави Temporal дида мебароем. Биёед рефакторингро оғоз кунем! Эҷоди объектҳои сана ва вақт Пеш аз он ки мо сана ва вақтҳоро идора карда тавонем, мо бояд объектҳои онҳоро муаррифӣ кунем. Барои сохтани объекти лаҳзае, ки сана ва вақти ҷорӣро ифода мекунад, функсияи лаҳзаро истифода баред. 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 сс:мм:сс а')); // 19.02.2026 02:27:07

Чизи асосие, ки бояд дар бораи лаҳза дар хотир дошт, ин аст, ки объекти лаҳза ҳамеша маълумотро дар бораи вақт ва санаро дар бар мегирад. Агар ба шумо танҳо лозим ояд, ки бо маълумоти вақт кор кунед, ин одатан хуб аст, аммо он метавонад рафтори ғайричашмдоштро дар ҳолатҳое ба вуҷуд орад, ба монанди вақти тобистон ё солҳои кабиса, ки сана метавонад ба ҳисобҳои вақт таъсир расонад. Муваққатӣ чандиртар аст. Шумо метавонед бо сохтани объекти Temporal.Instant объектеро эҷод кунед, ки сана ва вақти ҷорӣро ифода мекунад. Ин як нуқтаи вақтро ифода мекунад, ки аз ҷониби вақт аз "давра" муайян карда шудааст (нисфи шаби UTC 1 январи соли 1970). Temporal метавонад ба ин лаҳза бо дақиқии сатҳи наносония муроҷиат кунад. const now = Temporal.Now.instant();

// наносонияҳои хомро аз давра бубинед console.log(now.epochNanoseconds); // 1771466342612000000н

// формат барои UTC console.log(now.toString()); // 2026-02-19T01:55:27.844Z

// формат барои минтақаи вақти муайян console.log(now.toString({Zone: '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({Минтақаи вақт: 'America/New_York' })); // 2026-02-18T21:10:00-05:00

Шумо инчунин метавонед намудҳои дигари объектҳои муваққатиро эҷод кунед, аз ҷумла:

Temporal.PlainDate: Санаи бе маълумоти вақт. Temporal.PlainTime: Вақте, ки маълумот дар бораи сана нест. Temporal.ZonedDateTime: Сана ва вақт дар минтақаи вақти муайян.

Ҳар яке аз онҳо усули аз дорад, ки онро метавон бо объекти муайянкунандаи сана ва/ё вақт даъват кард ё сатри сана барои таҳлил. // Фақат сана const имрӯз = Temporal.PlainDate.from({ сол: 2026, моҳ: 2, // қайд кунед, ки мо 2-ро барои феврал истифода мебарем рӯз: 18 }); console.log(today.toString()); // 18-02-2026

// Танҳо як вақт 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[Амрико/Нью_Йорк]

Таҳлил Мо эҷоди барномавии иттилооти сана ва вақтро фаро гирифтем. Акнун биёед таҳлилро бубинем. Таҳлил як соҳаест, ки Moment нисбат ба API-и дарунсохташудаи Temporal чандиртар аст. Шумо метавонед сатри санаро тавассути интиқоли он ба функсияи лаҳза таҳлил кунед. Бо як далели ягона, Moment сатри санаи ISO-ро интизор аст, аммо шумо метавонед форматҳои алтернативӣ истифода баред, агар шумо далели дуюмро бо нишон додани формати санаи истифодашаванда пешниҳод кунед.

const isoDate = лаҳза ('2026-02-21T09:00:00'); const formattedDate = лаҳза('21/26 9:00:00', 'М/Д/ЙЙ с:мм:сс');

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 март аст? Аз ин сабаб, версияҳои навтарини Moment огоҳии барҷастаи бекоркуниро нишон медиҳанд, агар он бе сатри санаи форматшудаи ISO даъват карда шавад (агар далели дуюм бо формати дилхоҳ дода нашавад). Temporal танҳо сатри санаи махсус форматшударо таҳлил мекунад. Сатр бояд ба формати ISO 8601 ё тамдиди он, RFC 9557 мувофиқ бошад. Агар сатри санаи номувофиқ ба усули аз усули интиқол дода шавад, Temporal RangeError-ро мепартояд.

// Истифодаи сатри санаи RFC 9557 const myDate = Temporal.Instant.from('2026-02-21T09:00:00-05:00[Амрико/Нью_Йорк]'); console.log(myDate.toString({Zone: 'America/New_York' })); // 2026-02-21T09:00:00-05:00

// Истифодаи сатри санаи номаълум const otherDate = Temporal.Instant.from('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()); // 21-02-2026

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 Азбаски Temporal ба эътимоднокӣ афзалият медиҳад, он кӯшиш намекунад, ки формати сатрро мисли 02-01-2026 тахмин кунад. Агар манбаи маълумоти шумо чунин сатрҳоро истифода барад, ба шумо лозим меояд, ки пеш аз кӯшиши истифодаи он бо Temporal, ба шумо лозим меояд, ки баъзе коркарди сатрро барои аз нав танзим кардани арзишҳо ба сатри ISO ба монанди 2026-02-01 анҷом диҳед.

Форматкунӣ Пас аз он ки шумо объекти лаҳза ё муваққатӣ доред, шумо эҳтимол мехоҳед онро дар як лаҳза ба сатри форматшуда табдил диҳед. Ин як мисолест, ки Момент каме кӯтоҳтар аст. Шумо усули формати объектро бо як қатор нишонаҳо даъват мекунед, ки формати санаи дилхоҳро тавсиф мекунанд. санаи доимӣ = лаҳза ();

console.log(санаи.формат('MM/DD/YYYY')); // 22.02.2026

console.log(date.format('MMMM Оё YYYY, h:dd:ss a')); // 22 феврали 2026, 20:18:30

Аз тарафи дигар, Temporal аз шумо талаб мекунад, ки каме муфассалтар бошед. Объектҳои муваққатӣ, ба монанди Instant, дорои усули toLocaleString мебошанд, ки имконоти гуногуни форматкуниро, ки ҳамчун хосиятҳои объект нишон дода шудаанд, қабул мекунад.

санаи const = Temporal.Now.instant();

// бе ягон далел, мо формати пешфарзро барои маҳалли ҷорӣ мегирем console.log(date.toLocaleString()); // 22.02.2026, 20:23:36 (бо назардошти як маҳалли en-US)

// имконоти форматкуниро барои тавлиди сатри формати фармоишӣ гузаред console.log(date.toLocaleString('en-US', { моҳ: 'дароз', рӯз: "рақамӣ", сол: 'рақамӣ', соат: '2-рақам', дақиқа: '2-рақам' }))) // 22 феврали соли 2026, соати 20:23

// танҳо майдонҳоеро, ки шумо мехоҳед дар сатри формат гузаронед console.log(date.toLocaleString('en-US', { моҳ: 'кӯтоҳ', рӯз: 'рақамӣ' }))) // 22 феврал

Форматкунии санаи муваққатӣ воқеан API-и Intl.DateTimeFormat-ро (ки аллакай дар браузерҳои муосир дастрас аст) дар зери сарпӯш истифода мебарад. Ин маънои онро дорад, ки шумо метавонед як объекти дубора истифодашавандаи DateTimeFormat-ро бо имконоти форматкунии фармоишии худ эҷод кунед ва сипас объектҳои муваққатиро ба усули формати он гузаронед. Аз ин сабаб, он форматҳои санаи фармоиширо мисли Moment дастгирӣ намекунад. Агар ба шумо чизе ба монанди "Q1 2026" ё дигар форматкунии махсус лозим бошад, шояд ба шумо коди форматкунии санаи фармоишӣ лозим бошад ё ба китобхонаи тарафи сеюм муроҷиат кунед. const formatter = new Intl.DateTimeFormat('en-US', { моҳ: '2-рақам', рӯз: '2-рақам', сол: 'рақамӣ' });

санаи const = Temporal.Now.instant(); console.log(formatter.format(санаи)); // 22.02.2026

Навиштани аломатҳои форматкунии лаҳза осонтар аст, аммо онҳо ба маҳал мувофиқ нестанд. Формат сатрҳои "рамзи сахт" -ро ба монанди фармоиши моҳ/рӯз. Бартарии истифодаи объекти конфигуратсия, мисли Temporal, дар он аст, ки он ба таври худкор ба ҳар як маҳалли додашуда мутобиқ мешавад ва формати дурустро истифода мебарад. санаи const = Temporal.Now.instant();

const formatOptions = { моҳ: 'рақамӣ', рӯз: "рақамӣ", сол: 'рақамӣ' };

console.log(date.toLocaleString('en-US', formatOptions)); // 22.02.2026

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

Ҳисобкунии сана Дар бисёр барномаҳо ба шумо лозим меояд, ки дар як сана баъзе ҳисобҳоро анҷом диҳед. Шумо метавонед воҳидҳои вақтро (рӯзҳо, соатҳо, сонияҳо ва ғ.) илова кунед ё кам кунед. Масалан, агар шумо санаи ҷорӣ дошта бошед, шумо метавонед ба корбар санаи 1 ҳафтаи дигарро нишон диҳед. Объектҳои лаҳза дорои усулҳое ба монанди илова ва тарҳ кардан мебошанд, ки ин амалҳоро иҷро мекунанд. Ин функсияҳо арзиш ва воҳид мегиранд, масалан: add(7, 'days'). Аммо як фарқияти хеле муҳими байни лаҳза ва муваққатӣ дар он аст, ки ҳангоми иҷрои ин ҳисобҳои сана объекти аслӣ тағир дода мешавад ва арзиши аслии он гум мешавад. const now = лаҳза ();

console.log(ҳоло); // Лаҳза<2026-02-24T20:08:36-05:00>

const nextWeek = now.add(7, 'рӯз'); console.log (ҳафтаи оянда); // Лаҳза<2026-03-03T20:08:36-05:00>

// Gotcha - объекти аслӣ мутатсия карда шуд console.log(ҳоло); // Лаҳза<2026-03-03T20:08:36-05:00>

Барои роҳ надодан ба гум кардани санаи аслӣ, шумо метавонед клонро дар объекти Moment барои эҷод кардани нусха даъват кунед. const ҳоло= лаҳза (); const nextWeek = now.clone().add(7, 'рӯз');

console.log(ҳоло); // Лаҳза<2026-02-24T20:12:55-05:00>

console.log (ҳафтаи оянда); // Лаҳза<2026-03-03T20:12:55-05:00>

Аз тарафи дигар, объектҳои муваққатӣ тағирнопазиранд. Пас аз он ки шумо объектеро ба мисли Instant, PlainDate ва ғайра эҷод кардед, арзиши он ҳеҷ гоҳ тағир намеёбад. Объектҳои муваққатӣ инчунин усулҳои илова ва тарҳро доранд. Муваққатӣ каме интихобкунанда аст, ки кадом воҳидҳои вақтро ба кадом намуди объектҳо илова кардан мумкин аст. Масалан, шумо наметавонед рӯзҳоро ба як фаврӣ илова кунед:

const now = Temporal.Now.instant(); const nextWeek = now.add ({ рӯз: 7 }); // RangeError: Хатои муваққатӣ: Воҳиди калонтарин наметавонад воҳиди сана бошад

Сабаб дар он аст, ки объектҳои фаврӣ нуқтаи мушаххаси вақтро дар UTC намояндагӣ мекунанд ва тақвимӣ-агностикӣ мебошанд. Азбаски дарозии рӯз метавонад дар асоси қоидаҳои минтақаи вақт, ба монанди вақти тобистон, тағйир ёбад, ин ҳисоб дар Instant дастрас нест. Аммо, шумо метавонед ин амалро дар дигар намудҳои объектҳо, ба монанди PlainDateTime иҷро кунед: const now = Temporal.Now.plainDateTimeISO(); console.log(now.toLocaleString()); // 24.02.2026, 20:23:59

const nextWeek = now.add ({ рӯз: 7 });

// Дар хотир доред, ки PlainDateTime аслии бетағйир боқӣ мемонад console.log(now.toLocaleString()); // 24.02.2026, 20:23:59

console.log(nextWeek.toLocaleString()); // 03.03.2026, 20:23:59

Шумо инчунин метавонед ҳисоб кунед, ки байни ду объекти лаҳза ё муваққатӣ чӣ қадар вақт аст. Бо функсияи фарқияти лаҳза, шумо бояд воҳиди гранулярӣ пешниҳод кунед, вагарна он фарқиятро бо миллисонияҳо бармегардонад. санаи давом1 = лаҳза ('2026-02-21T09:00:00'); санаи давомдор2 = лаҳза ('2026-02-22T10:30:00');

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

console.log(date2.diff(санаи1, 'рӯзҳо')); // 1

Барои ин бо объекти муваққатӣ, шумо метавонед объекти дигари муваққатиро ба усулҳои то ё баъд аз он гузаронед. Ин объекти Temporal.Duration-ро бар мегардонад, ки дорои маълумот дар бораи фарқияти вақт аст. Объекти 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.sice(санаи1, { бузургтаринВоҳид: 'рӯз' });

console.log(фарқ.рӯзҳо); // 1

console.log(фарқ.соат); // 1

console.log(фарқ.дақиқаҳо); // 30

console.log(diff.toString()); // P1DT1H30M // (Сатри давомнокии ISO 8601: 1 рӯз, 1 соат, 30 дақиқа)

Муқоисаи санаҳо ва вақтҳо Moment ва Temporal ҳарду ба шумо имкон медиҳанд, ки санаҳо ва вақтҳоро муқоиса кунед, то муайян кунед, ки кадоме аз дигараш пештар меояд, аммо бо API равишҳои гуногунро истифода баред. Moment усулҳои монанди isBefore, isAfter ва isSameро барои муқоисаи ду объекти Moment пешниҳод мекунад. санаи давом1 = лаҳза ('2026-02-21T09:00:00'); санаи давомдор2 = лаҳза ('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);

Табдилдиҳии минтақаи вақт Китобхонаи асосии Moment табдилдиҳии минтақаи вақтро дастгирӣ намекунад. Агар ба шумо ин функсия лозим бошад, шумо инчунин бояд бастаи лаҳзаи вақтро насб кунед. Ин баста аз дарахт ларзон нест ва аз ин рӯ метавонад ба андозаи бастаи шумо ба таври назаррас илова кунад. Пас аз он ки шумо минтақаи вақтро насб кардед, шумо метавонед объектҳои лаҳзаро бо усули tz ба минтақаҳои гуногуни вақт табдил диҳед. Мисли дигар амалиётҳои Moment, ин чизи асосиро мутатсия мекунадобъект. // Бо назардошти вақти шарқи ИМА 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>

Функсияи минтақаи вақт дар API Temporal ҳангоми истифодаи объекти Temporal.ZonedDateTime сохта шудааст. Ин объектҳо усули withTimeZone-ро дар бар мегиранд, ки ZonedDateTime-и навро бар мегардонад, ки ҳамон лаҳзаро дар вақт, вале дар минтақаи вақти муайяншуда муаррифӣ мекунад. // Боз, бо назардошти вақти шарқи ИМА const now = Temporal.Now.zonedDateTimeISO(); console.log(now.toLocaleString()); // 28.02.2026, 20:12:02 EST

// Табдил додан ба вақти Уқёнуси Ором const nowPacific = now.withTimeZone('Амрико/Лос_Анҷелес'); console.log(nowPacific.toLocaleString()); // 28.02.2026, 17:12:02 PST

// Объекти аслӣ бетағйир мемонад console.log(now.toLocaleString()); // 28.02.2026, 20:12:02 EST

Эзоҳ: Арзишҳои форматшудае, ки аз ҷониби toLocaleString баргардонида мешаванд, тавре ки аз номаш бармеояд, аз маҳал вобастаанд. Рамзи намунавӣ дар забони en-US таҳия шудааст, аз ин рӯ формат чунин аст: 28.02.2026, 17:12:02 PM PST. Дар маҳалли дигар, ин метавонад гуногун бошад. Масалан, дар забони en-GB, шумо чизе ба монанди 28/2/2026, 17:12:02 GMT-8 мегиред. Рефакторинг дар ҷаҳони воқеӣ Фарз мекунем, ки мо барномаеро барои банақшагирии рӯйдодҳо дар минтақаҳои вақт сохта истодаем. Қисми ин барнома функсияи getEventTimes мебошад, ки сатри ISO 8601-ро мегирад, ки вақт ва санаи рӯйдод, минтақаи вақти маҳаллӣ ва минтақаи вақти мақсаднокро ифода мекунад. Функсия сатрҳои форматшудаи вақт ва санаро барои ҳодиса дар ҳарду минтақаи вақт эҷод мекунад. Агар ба функсия сатри вуруд дода шавад, ки он сатри дурусти вақт/сана набошад, он хато содир мекунад. Ин аст татбиқи аслӣ бо истифода аз Moment (инчунин истифодаи бастаи лаҳзаи вақтро талаб мекунад).

воридоти лаҳза аз "минтақаи вақт";

Функсияи getEventTimes (inputString, userTimeZone, targetTimeZone) { const timeFormat = 'MMD D, YYYY, h:dd:ss a z';

// 1. Лаҳзаи ибтидоиро дар минтақаи вақти корбар эҷод кунед const eventTime = moment.tz ( inputString, moment.ISO_8601, // Интизор шавед, ки сатри ISO 8601 дуруст, // Таҳлили қатъӣ userTimeZone );

// Агар inputString санаи дурустро нишон надиҳад, хато партоед агар (!eventTime.isValid()) { партоед Хатои нав('Вориди сана/ваќт нодуруст'); }

// 2. Вақти мақсаднокро ҳисоб кунед // КРИТИКАЛӢ: Мо бояд клон кунем, ё 'eventTime' то абад тағир ёбад! const targetTime = eventTime.clone().tz(targetTimeZone);

бозгашт { маҳаллӣ: eventTime.format (timeFormat), ҳадаф: targetTime.format(timeFormat), }; }

ҷадвали const = getEventTimes ( '03-05-2026 15:00-05:00', 'Амрико/Нью_Йорк', 'Аврупо/Лондон', );

console.log(schedule.local); // 5 марти 2026, 15:00:00 EST

console.log(schedule.target); // 5 марти 2026, 20:00:00 GMT

Дар ин мисол, мо формати санаи пешбинишудаи ISO 8601-ро истифода мебарем, ки он ба Moment муфид аст. Мо инчунин таҳлили қатъиро истифода мебарем, ки ин маънои онро дорад, ки Moment кӯшиш намекунад, ки бо сатри санае, ки ба формат мувофиқат намекунад, тахмин кунад. Агар сатри санаи ғайри ISO гузаронида шавад, он боиси объекти санаи беэътибор мегардад ва мо хато мекунем. Татбиқи муваққатӣ ба назар монанд аст, аммо якчанд фарқиятҳои калидӣ дорад.

Функсияи getEventTimes (inputString, userTimeZone, targetTimeZone) { // 1. Вурудро мустақиман дар Instant таҳлил кунед ва сипас эҷод кунед // ZonedDateTime дар минтақаи корбар. const instant = Temporal.Instant.from(inputString); const eventTime = instant.toZonedDateTimeISO(userTimeZone);

// 2. Табдил додан ба минтақаи мавриди ҳадаф // Ин ба таври худкор объекти НАВро бармегардонад; 'eventTime' бехатар аст. const targetTime = eventTime.withTimeZone(targetTimeZone);

// 3. Формат бо истифода аз Intl (дарунсохт) имконоти const = { сол: 'рақамӣ', моҳ: 'кӯтоҳ', рӯз: "рақамӣ", соат: 'рақамӣ', дақиқа: '2-рақам', дуюм: '2-рақам', Номи вақт: 'кӯтоҳ' };

бозгашт { маҳаллӣ: eventTime.toLocaleString(navigator.language, имконоти), ҳадаф: targetTime.toLocaleString(navigator.language, имконоти) }; }

ҷадвали const = getEventTimes ( '03-05-2026 15:00-05:00', 'Амрико/Нью_Йорк', 'Аврупо/Лондон', );

console.log(schedule.local); // 5 марти 2026, 15:00:00 EST

console.log(schedule.target); // 5 марти соли 2026, соати 20:00:00 GMT

Бо Moment, мо бояд сатри форматро барои сатри санаи натиҷавӣ ба таври возеҳ муайян кунем. Новобаста аз макони корбар ё маҳалли ҷойгиршавӣ, вақти ҳодиса ҳамеша ҳамчун 5 марти соли 2026, 3:00:00 формат карда мешавад.соати EST. Инчунин, мо набояд ба таври возеҳ истисно гузорем. Агар сатри беэътибор ба Temporal.Instant.from интиқол дода шавад, Temporal барои мо истисноро мепартояд. Як чизро бояд қайд кард, ки ҳатто бо таҳлили қатъӣ, версияи Moment ҳанӯз сабуктар аст. Temporal ҷуброни минтақаи вақтро дар охири сатр талаб мекунад. Шумо инчунин бояд қайд кунед, ки азбаски мо navigator.language-ро истифода мебарем, ин код танҳо дар муҳити браузер кор мекунад, зеро navigator дар муҳити Node.js муайян карда нашудааст. Татбиқи муваққатӣ маҳалли ҷории браузерро (navigator.language) истифода мебарад, аз ин рӯ корбар ба таври худкор вақтҳои рӯйдодҳоро дар формати вақти маҳаллии худ формат мекунад. Дар маҳалли ИМА, ин 5 марти соли 2026, соати 15:00:00 EST. Аммо, агар корбар дар Лондон бошад, вақти ҳодиса ҳамчун 5 марти 2026, соати 15:00:00 GMT-5 формат карда мешавад. Хулоса

Амал Moment.js Муваққатӣ Вақти ҷорӣ лаҳза () Temporal.Now.zonedDateTimeISO() Таҳлили ISO лаҳза (кӯч) Temporal.Instant.from(str) Вақт илова кунед .add(7, 'рӯз') (мутатсионӣ) .add({ рӯз: 7 }) (объекти нав) Фарқият .diff(дигар, 'соат') .аз (дигар).соатҳо Минтақаи вақт .tz('Минтақа/Ном') .withTimeZone('Минтақа/Ном')

Дар назари аввал, фарқият метавонад каме фарқ кунад (ва дар мавриди Temporal, баъзан муфассалтар ва сахттар) синтаксис, аммо якчанд бартариҳои асосии истифодаи Temporal нисбат ба Moment.js мавҷуданд:

Мушаххас будан маънои кам шудани сюрпризҳо ва хатогиҳои ғайричашмдоштро дорад. Чунин ба назар мерасад, ки лаҳза сабуктар бошад, аммо он "тахмин кардан" -ро дар бар мегирад, ки баъзан метавонад ба санаҳои нодуруст оварда расонад. Агар шумо ба Temporal чизи беэътибор диҳед, он хато мекунад. Агар код кор кунад, шумо медонед, ки шумо санаи дуруст доред. Лаҳза метавонад ба бастаи барнома андозаи назаррасро илова кунад, алахусус агар шумо бастаи минтақаи вақтро истифода баред. Temporal чизе илова намекунад (вақте ки он дар браузерҳои мақсадноки шумо фиристода мешавад). Тағирнопазирӣ ба шумо боварӣ мебахшад, ки шумо ҳеҷ гоҳ ҳангоми табдили сана ва амалиёт маълумотро аз даст намедиҳед ё баргардонед. Намоишҳои гуногуни вақт (Instant, PlainDateTime, ZonedDateTime) вобаста ба талаботи шумо, ки дар он лаҳза ҳамеша дар атрофи тамғаи вақти UTC печонида мешавад. Temporal API-ҳои Intl-ро барои форматкунии сана истифода мебарад, ки ин маънои онро дорад, ки шумо метавонед формати маҳаллиро бидуни муайян кардани нишонаҳо ба таври возеҳ дошта бошед.

Қайдҳо дар бораи Polyfill Тавре ки қаблан зикр гардид, як полифили муваққатӣ мавҷуд аст, ки ҳамчун бастаи npm бо номи @js-temporal/polyfill тақсим карда мешавад. Агар шумо хоҳед, ки имрӯз Temporal-ро истифода баред, ба шумо ин полифилл барои дастгирии браузерҳо ба монанди Safari, ки то ҳол API-ро нафиристодаанд, лозим аст. Хабари бад дар он аст, ки он ба андозаи бастаи шумо илова хоҳад кард. Хабари хуш ин аст, ки он то ҳол нисбат ба лаҳза ё минтақаи вақт ба таври назаррас камтар илова мекунад. Ин аст муқоисаи андозаҳои бастаҳо, ки аз ҷониби Bundlephobia.com, вебсайте, ки маълумотро дар бораи андозаи бастаи npm пешниҳод мекунад (барои дидани таҳлили Bundlephobia ба ҳар як номи баста клик кунед):

Баста Кам кардашуда Майнашуда ва gzipped @js-temporal/polyfill 154,1 кБ 44,1 кБ лаҳза 294,4 кБ 75,4 кБ минтақаи вақт 1 МБ 114,2 кБ

Полифилл инчунин таърихан дар мавриди истифодаи хотира баъзе мушкилоти иҷроиш дошт ва дар замони навиштан он дар ҳолати алфа ҳисобида мешавад. Аз ин сабаб, шумо наметавонед онро дар истеҳсолот истифода баред, то он даме, ки он ба ҳолати баркамолтар расад. Дигар хабари хуш ин аст, ки умедворем полифилл дигар лозим нахоҳад шуд (агар ба шумо лозим нест, ки браузерҳои кӯҳнаро дастгирӣ кунед, албатта). Ҳангоми навиштан, Temporal дар Chrome, Edge ва Firefox фиристода шудааст. Он ҳанӯз дар Safari комилан омода нест, гарчанде ки он бо парчами вақти корӣ дар пешнамоиши технологияи навтарин дастрас аст.

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