Avastage JavaScripti Temporal API Duration-objekt tÀpsete ja intuitiivsete ajaintervallide arvutuste jaoks, alates pÔhitÔdedest kuni keerukate stsenaariumideni.
JavaScript Temporali Durationi valdamine: pÔhjalik juhend ajaintervallide arvutamiseks
JavaScripti Temporal API on mĂ€rkimisvÀÀrne edasiminek kuupĂ€evade ja kellaaegade kĂ€sitlemisel. Ăks selle pĂ”hikomponente on Duration-objekt, mis on loodud spetsiaalselt ajaintervallide esitamiseks. Erinevalt traditsioonilisest Date-objektist, mis kannatab muutlikkuse ja ajavööndite keerukuse all, pakub Duration puhtamat, tĂ€psemat ja rahvusvaheliselt teadlikumat viisi ajavahemikega töötamiseks. See pĂ”hjalik juhend uurib Duration-objekti ĂŒksikasjalikult, alates pĂ”hitĂ”dedest kuni keerukate stsenaariumideni.
Mis on Temporal Duration?
Temporal.Duration esindab ajavahemikku, mis on sĂ”ltumatu mis tahes konkreetsest kalendrisĂŒsteemist vĂ”i ajavööndist. See keskendub ainult aja kogusele, mida vĂ€ljendatakse aastates, kuudes, pĂ€evades, tundides, minutites, sekundites ja sekundi murdosades. MĂ”elge sellest kui "5 aastat, 3 kuud ja 2 pĂ€eva", mitte kui "1. jaanuarist 2023 kuni 3. mĂ€rtsini 2028".
See eristus on ĂŒlioluline, sest kestused on oma olemuselt suhtelised. Kestuse lisamine konkreetsele kuupĂ€evale annab alati uue kuupĂ€eva, kuid tĂ€pne tulemus sĂ”ltub kalendrisĂŒsteemist ja alguskuupĂ€evast. NĂ€iteks ĂŒhe kuu lisamine 31. jaanuarile annab erinevaid kuupĂ€evi sĂ”ltuvalt sellest, kas tegemist on liigaastaga.
Duration-objektide loomine
On mitmeid viise Temporal.Duration-objektide loomiseks:
1. Komponentidest
KÔige otsesem viis on kasutada meetodit Temporal.Duration.from objektiga, mis sisaldab soovitud komponente:
const duration1 = Temporal.Duration.from({ years: 1, months: 6, days: 15 });
console.log(duration1.toString()); // VĂ€ljund: P1Y6M15D
const duration2 = Temporal.Duration.from({ hours: 8, minutes: 30, seconds: 12, milliseconds: 500 });
console.log(duration2.toString()); // VĂ€ljund: PT8H30M12.5S
const duration3 = Temporal.Duration.from({ years: 2, days: -5, seconds: 30 });
console.log(duration3.toString()); // VĂ€ljund: P2YT-5S30S
Pange tÀhele, et saate kasutada negatiivseid vÀÀrtusi, et esitada kestusi, mis liiguvad ajas tagasi.
2. ISO 8601 stringist
Meetod Temporal.Duration.from aktsepteerib ka ISO 8601 kestuse stringi:
const duration4 = Temporal.Duration.from('P3Y2M10DT5H30M');
console.log(duration4.toString()); // VĂ€ljund: P3Y2M10DT5H30M
const duration5 = Temporal.Duration.from('PT1H15M30S');
console.log(duration5.toString()); // VĂ€ljund: PT1H15M30S
const duration6 = Temporal.Duration.from('P-1Y');
console.log(duration6.toString()); // VĂ€ljund: P-1Y
ISO 8601 kestuse formaat on P[aastad]Y[kuud]M[pÀevad]D[T[tunnid]H[minutid]M[sekundid]S]. 'P' tÀhistab perioodi (kestust) ja 'T' eraldab kuupÀeva ja kellaaja komponente.
3. Konstruktori kasutamine
Saate kasutada ka otse Temporal.Duration konstruktorit:
const duration7 = new Temporal.Duration(1, 2, 3, 4, 5, 6, 7, 8);
console.log(duration7.toString()); // VĂ€ljund: P1Y2M3W4DT5H6M7S8ms
Konstruktori argumendid on jÀrgmises jÀrjekorras: aastad, kuud, nÀdalad, pÀevad, tunnid, minutid, sekundid, millisekundid, mikrosekundid, nanosekundid.
Durationi omadused
Kui teil on Duration-objekt, saate selle komponentidele juurde pÀÀseda selle omaduste kaudu:
const duration = Temporal.Duration.from('P1Y2M3DT4H5M6S');
console.log(duration.years); // VĂ€ljund: 1
console.log(duration.months); // VĂ€ljund: 2
console.log(duration.days); // VĂ€ljund: 3
console.log(duration.hours); // VĂ€ljund: 4
console.log(duration.minutes); // VĂ€ljund: 5
console.log(duration.seconds); // VĂ€ljund: 6
console.log(duration.milliseconds); // VĂ€ljund: 0
console.log(duration.microseconds); // VĂ€ljund: 0
console.log(duration.nanoseconds); // VĂ€ljund: 0
Kestuse aritmeetika
Duration-objekt pakub meetodeid aritmeetiliste tehete sooritamiseks:
1. Kestuste liitmine
Kasutage meetodit add, et liita kaks kestust kokku:
const duration1 = Temporal.Duration.from('P1Y2M');
const duration2 = Temporal.Duration.from('P3M4D');
const sum = duration1.add(duration2);
console.log(sum.toString()); // VĂ€ljund: P1Y5M4D
2. Kestuste lahutamine
Kasutage meetodit subtract, et lahutada ĂŒks kestus teisest:
const duration1 = Temporal.Duration.from('P1Y2M');
const duration2 = Temporal.Duration.from('P3M4D');
const difference = duration1.subtract(duration2);
console.log(difference.toString()); // VĂ€ljund: PPT11M-4D
3. Kestuse eitamine
Kasutage meetodit negated, et pöörata kestuse kÔigi komponentide mÀrk vastupidiseks:
const duration = Temporal.Duration.from('P1Y2M-3D');
const negatedDuration = duration.negated();
console.log(negatedDuration.toString()); // VĂ€ljund: P-1YT-2M3D
4. Kestuse absoluutvÀÀrtus
Kasutage meetodit abs, et saada kestus, mille kÔik komponendid on positiivsed:
const duration = Temporal.Duration.from('P-1YT2M-3D');
const absoluteDuration = duration.abs();
console.log(absoluteDuration.toString()); // VĂ€ljund: P1YT2M3D
5. Kestuse korrutamine
Kasutage meetodit multiply, et korrutada kestust arvuga:
const duration = Temporal.Duration.from('PT1H30M');
const multipliedDuration = duration.multiply(2.5);
console.log(multipliedDuration.toString()); // VĂ€ljund: PT3H45M
6. Kestuse ĂŒmardamine
Kasutage meetodit round, et ĂŒmardada kestus kindla ĂŒhikuni. See nĂ”uab valiku relativeTo mÀÀramist, mis vĂ”ib olla Temporal.PlainDateTime vĂ”i Temporal.ZonedDateTime, sest mĂ”ned ĂŒhikud (nagu kuud ja aastad) on muutuva pikkusega.
const duration = Temporal.Duration.from('P1DT12H30M');
const relativeTo = Temporal.PlainDateTime.from('2024-01-01T00:00:00');
const roundedDuration = duration.round({ smallestUnit: 'days', relativeTo });
console.log(roundedDuration.toString()); // VĂ€ljund: P2D
Selles nĂ€ites ĂŒmardatakse 1 pĂ€ev ja 12 tundi 2 pĂ€evaks.
Kestuste vÔrdlemine
Saate vĂ”rrelda kahte kestust, kasutades meetodit compare. Siiski pidage meeles, et segaĂŒhikutega kestusi (nt aastad ja pĂ€evad) ei saa usaldusvÀÀrselt vĂ”rrelda ilma suhtelise kontekstita (konkreetne kuupĂ€ev ja kalender). Funktsioon compare tagastab:
- -1 kui kestus1 on vÀiksem kui kestus2
- 0 kui kestus1 on vÔrdne kestusega2
- 1 kui kestus1 on suurem kui kestus2
const duration1 = Temporal.Duration.from('PT1H');
const duration2 = Temporal.Duration.from('PT30M');
console.log(Temporal.Duration.compare(duration1, duration2)); // VĂ€ljund: 1
console.log(Temporal.Duration.compare(duration2, duration1)); // VĂ€ljund: -1
console.log(Temporal.Duration.compare(duration1, Temporal.Duration.from('PT1H'))); // VĂ€ljund: 0
const duration3 = Temporal.Duration.from('P1M');
const duration4 = Temporal.Duration.from('P30D');
// duration3 ja duration4 otse vÔrdlemine viskab paljudes mootorites vea
// kui 'relativeTo' pole mÀÀratud, kuna kuu pikkus ei ole konstantne.
Praktilised nÀited ja kasutusjuhud
Temporal.Duration-objekt on uskumatult mitmekĂŒlgne ja seda saab kasutada paljudes rakendustes:
1. Projekti kestuse arvutamine
Kujutage ette, et haldate projekti, millel on algus- ja lÔppkuupÀev. Saate kasutada Temporal.PlainDate ja Temporal.Duration, et arvutada projekti kestus:
const startDate = Temporal.PlainDate.from('2024-01-15');
const endDate = Temporal.PlainDate.from('2024-03-20');
const duration = endDate.since(startDate);
console.log(duration.toString()); // VĂ€ljund: P1M5D
2. Korduvate sĂŒndmuste planeerimine
Saate kasutada Temporal.Duration, et mÀÀratleda korduvate sĂŒndmuste sagedust, nĂ€iteks iganĂ€dalasi koosolekuid vĂ”i igakuiseid aruandeid:
const eventFrequency = Temporal.Duration.from({ weeks: 1 });
let nextEventDate = Temporal.PlainDate.from('2024-01-22');
for (let i = 0; i < 5; i++) {
console.log(`Event ${i + 1}: ${nextEventDate.toString()}`);
nextEventDate = nextEventDate.add(eventFrequency);
}
// VĂ€ljund:
// Event 1: 2024-01-22
// Event 2: 2024-01-29
// Event 3: 2024-02-05
// Event 4: 2024-02-12
// Event 5: 2024-02-19
3. Vanuse arvutamine
Kuigi vanuse tĂ€pne arvutamine nĂ”uab liigaastate ja erinevate kalendrisĂŒsteemide kĂ€sitlemist, saab Temporal.Duration anda hea ligikaudse tulemuse:
const birthDate = Temporal.PlainDate.from('1990-05-10');
const today = Temporal.PlainDate.from('2024-02-15');
const ageDuration = today.since(birthDate);
console.log(`Ligikaudne vanus: ${ageDuration.years} aastat, ${ageDuration.months} kuud, ${ageDuration.days} pÀeva`);
4. Ajavöönditeadlikud arvutused: lennukestused
Globaalsete rakenduste puhul on ajavööndite kĂ€sitlemine ĂŒlioluline. MĂ”elgem nĂ€iteks lennukestuste arvutamisele erinevate ajavööndite vahel:
const departureZonedDateTime = Temporal.ZonedDateTime.from('2024-03-15T10:00:00[America/Los_Angeles]');
const arrivalZonedDateTime = Temporal.ZonedDateTime.from('2024-03-16T14:30:00[Europe/London]');
const flightDuration = arrivalZonedDateTime.since(departureZonedDateTime);
console.log(`Lennu kestus: ${flightDuration.hours} tundi, ${flightDuration.minutes} minutit`);
console.log(flightDuration.toString());
See nÀide demonstreerib, kuidas Temporal.ZonedDateTime, kui seda kombineerida meetodiga .since(), kohandub automaatselt ajavööndite erinevustega, pakkudes tÀpset lennukestust.
5. Teenusetaseme lepingute (SLA) jÀlgimine
Paljud veebiteenused lubavad tööaja garantiisid. Saate kasutada `Temporal.Duration` nende lepingute mÀÀratlemiseks ja jÀlgimiseks.
const slaGuarantee = Temporal.Duration.from('PT99H59M59S'); // Peaaegu 100 tundi
const downtime = Temporal.Duration.from('PT1H');
if (downtime.compare(slaGuarantee) > 0) {
console.log("SLA-d on rikutud!");
} else {
console.log("SLA on tÀidetud.");
}
TĂ€psemad kaalutlused
1. Kuude ja aastate mitmetÀhenduslikkus
Nagu varem mainitud, vĂ”ib kuude ja aastate pikkus varieeruda. Nende ĂŒhikutega arvutusi tehes on sageli vaja pakkuda suhtelist konteksti, kasutades Temporal.PlainDateTime vĂ”i Temporal.ZonedDateTime. See on eriti oluline kestuste ĂŒmardamisel vĂ”i vĂ”rdlemisel.
2. KalendrisĂŒsteemid
Temporal API toetab erinevaid kalendrisĂŒsteeme. Vaikimisi kasutab see ISO 8601 kalendrit, mis on kĂ”ige laialdasemalt kasutatav. Siiski saate Temporal.PlainDate vĂ”i Temporal.ZonedDateTime objekte luues mÀÀrata ka teisi kalendrisĂŒsteeme. Kestused jÀÀvad kalendrist sĂ”ltumatuks; need esindavad aja hulka.
3. Ajavööndite andmebaasi uuendused
Ajavööndireeglid vĂ”ivad aja jooksul muutuda poliitilistel vĂ”i geograafilistel pĂ”hjustel. TĂ€psete arvutuste tagamiseks on ĂŒlioluline hoida oma ajavööndite andmebaas ajakohasena, eriti kui tegelete Temporal.ZonedDateTime-ga. Kaasaegsed JavaScripti kĂ€ituskeskkonnad tegelevad sellega tavaliselt automaatselt, kuid mĂ”nes keskkonnas peate vĂ”ib-olla andmebaasi kĂ€sitsi uuendama.
Parimad praktikad
- Kasutage ISO 8601 kestuse stringe serialiseerimiseks ja andmevahetuseks. See tagab koostalitlusvÔime ja vÀldib mitmetÀhenduslikkust.
- Eelistage ajaintervallide esitamiseks
Temporal.Duration-it, selle asemel et arvutada otse kaheDate-objekti vahe. See viib puhtama ja paremini hooldatava koodini. - Olge teadlik kuude ja aastate mitmetÀhenduslikkusest ning pakkuge alati vajadusel suhtelist konteksti.
- Kasutage ajavöönditeadlike arvutuste jaoks
Temporal.ZonedDateTime-i. - Hoidke oma ajavööndite andmebaas ajakohasena.
- SegaĂŒhikutega kestusi vĂ”rreldes kasutage tĂ€pse vĂ”rdluse tagamiseks alati
round-meetodit koos suhtelise kontekstiga.
KokkuvÔte
Temporal.Duration-objekt pakub vÔimsat ja intuitiivset viisi JavaScriptis ajaintervallidega töötamiseks. Selle omadusi, meetodeid ja parimaid praktikaid mÔistes saate kirjutada robustsemat, tÀpsemat ja rahvusvaheliselt teadlikumat koodi. Temporal API ja eriti Duration-objekt on mÀrkimisvÀÀrne samm edasi JavaScripti kuupÀevade ja kellaaegade kÀsitlemisel, muutes ajaga seotud arvutuste lihtsustamise abil rakenduste loomise tÀpsemaks ja globaalselt asjakohasemaks. VÔtke Temporal API omaks ja avage selle potentsiaal oma ajaga seotud arvutuste lihtsustamiseks.
Kuna Temporal API areneb pidevalt, olge kursis uute funktsioonide ja uuendustega. Ametlik ECMAScripti ettepanek ja sellega seotud dokumentatsioon on suurepĂ€rased ressursid ajakohasena pĂŒsimiseks.