తెలుగు

ఖచ్చితమైన మరియు సహజమైన సమయ వ్యవధి గణనల కోసం జావాస్క్రిప్ట్ యొక్క టెంపోరల్ API ను ఉపయోగించడానికి ఒక సమగ్ర గైడ్, ప్రాథమిక వ్యవధి సృష్టి నుండి అధునాతన అంకగణితం మరియు ఫార్మాటింగ్ వరకు ప్రతిదీ కవర్ చేస్తుంది.

జావాస్క్రిప్ట్ టెంపోరల్ వ్యవధి: సమయ వ్యవధి గణనలలో నైపుణ్యం

జావాస్క్రిప్ట్ యొక్క టెంపోరల్ API తేదీలు, సమయాలు మరియు సమయ వ్యవధులను నిర్వహించడానికి ఒక ఆధునిక మరియు శక్తివంతమైన మార్గాన్ని పరిచయం చేస్తుంది. Temporal.Duration వస్తువు సమయం యొక్క పొడవును సూచిస్తుంది, సమయ వ్యవధులతో గణనలు చేయడానికి స్పష్టమైన మరియు సహజమైన విధానాన్ని అందిస్తుంది. ఈ ఆర్టికల్ Temporal.Duration యొక్క వివరాలను పరిశీలిస్తుంది, వివిధ ఉపయోగ కేసుల కోసం వ్యవధులను ఎలా సృష్టించాలో, మార్పు చేయాలో మరియు ఫార్మాట్ చేయాలో వివరిస్తుంది.

టెంపోరల్.డ్యూరేషన్ అంటే ఏమిటి?

Temporal.Duration అనేది సమయం యొక్క విస్తృతిని సూచిస్తుంది, సంవత్సరాలు, నెలలు, రోజులు, గంటలు, నిమిషాలు, సెకన్లు మరియు సెకనులో కొంత భాగాలుగా (మిల్లీసెకన్లు, మైక్రో సెకన్లు, నానో సెకన్లు) వ్యక్తపరుస్తుంది. ఒక నిర్దిష్ట సమయాన్ని సూచించే Date వస్తువుల మాదిరిగా కాకుండా, Temporal.Duration సమయం మొత్తాన్ని సూచిస్తుంది. ఇది ISO 8601 వ్యవధి ఆకృతికి అనుగుణంగా ఉంటుంది (ఉదాహరణకు, P1Y2M10DT2H30M అంటే 1 సంవత్సరం, 2 నెలలు, 10 రోజులు, 2 గంటలు మరియు 30 నిమిషాలు). టెంపోరల్ API పాత Date వస్తువు కంటే మరింత సహజమైనదిగా మరియు తక్కువ లోపాలు కలిగినదిగా రూపొందించబడింది.

టెంపోరల్.డ్యూరేషన్ ఆబ్జెక్ట్‌లను సృష్టించడం

Temporal.Duration ఆబ్జెక్ట్‌లను సృష్టించడానికి అనేక మార్గాలు ఉన్నాయి:

1. ఒక సాధారణ వస్తువు నుండి

కావలసిన లక్షణాలతో ఒక వస్తువును పంపడం ద్వారా మీరు వ్యవధిని సృష్టించవచ్చు:

const duration = new Temporal.Duration(1, 2, 10, 2, 30, 0, 0, 0);
console.log(duration.toString()); // Output: P1Y2M10DT2H30M

ఇది 1 సంవత్సరం, 2 నెలలు, 10 రోజులు, 2 గంటలు మరియు 30 నిమిషాల వ్యవధిని సృష్టిస్తుంది. వాదనలు ఈ క్రమానికి అనుగుణంగా ఉంటాయని గుర్తుంచుకోండి: years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds.

2. ISO 8601 స్ట్రింగ్ నుండి

మీరు Temporal.Duration.from()ని ఉపయోగించి ISO 8601 వ్యవధి స్ట్రింగ్ నుండి వ్యవధిని కూడా సృష్టించవచ్చు:

const duration = Temporal.Duration.from("P1Y2M10DT2H30M");
console.log(duration.toString()); // Output: P1Y2M10DT2H30M

స్ట్రింగ్ ఆకృతిలో నిల్వ చేయబడిన లేదా బాహ్య మూలం నుండి స్వీకరించబడిన వ్యవధులతో వ్యవహరించేటప్పుడు ఇది చాలా ఉపయోగకరంగా ఉంటుంది.

3. Temporal.Instant, Temporal.ZonedDateTime, మొదలైన వాటితో add() మరియు subtract() పద్ధతులను ఉపయోగించడం

మీరు ఇతర టెంపోరల్ రకాల (Temporal.Instant లేదా Temporal.ZonedDateTime వంటివి) నుండి Temporal.Durationను జోడించినప్పుడు లేదా తీసివేసినప్పుడు, మీరు వాటిని తీసివేసినట్లయితే రెండు సమయాల మధ్య వ్యత్యాసాన్ని సూచించే Temporal.Duration తిరిగి ఇవ్వబడుతుంది. ఉదాహరణకు:

const now = Temporal.Now.zonedDateTimeISO();
const later = now.add({ hours: 5 });
const duration = later.since(now);
console.log(duration.toString()); // Output: PT5H

వ్యవధి భాగాలను యాక్సెస్ చేయడం

మీరు దాని లక్షణాలను ఉపయోగించి Temporal.Duration వస్తువు యొక్క వ్యక్తిగత భాగాలను యాక్సెస్ చేయవచ్చు:

const duration = Temporal.Duration.from("P1Y2M10DT2H30M");
console.log(duration.years);      // Output: 1
console.log(duration.months);     // Output: 2
console.log(duration.days);       // Output: 10
console.log(duration.hours);      // Output: 2
console.log(duration.minutes);     // Output: 30
console.log(duration.seconds);     // Output: 0
console.log(duration.milliseconds); // Output: 0
console.log(duration.microseconds); // Output: 0
console.log(duration.nanoseconds);  // Output: 0

వ్యవధులతో అంకగణితం చేయడం

Temporal.Duration వస్తువులు add() మరియు subtract() పద్ధతులను ఉపయోగించి కూడిక మరియు తీసివేతకు మద్దతు ఇస్తాయి. ఈ పద్ధతులు ఆపరేషన్ ఫలితాన్ని సూచించే కొత్త Temporal.Duration వస్తువును తిరిగి ఇస్తాయి.

const duration1 = Temporal.Duration.from("P1Y2M");
const duration2 = Temporal.Duration.from("P3M4D");

const addedDuration = duration1.add(duration2);
console.log(addedDuration.toString()); // Output: P1Y5M4D

const subtractedDuration = duration1.subtract(duration2);
console.log(subtractedDuration.toString()); // Output: P10M26D

మీరు మరింత సంక్లిష్టమైన గణనల కోసం ఈ పద్ధతులను కూడా గొలుసు చేయవచ్చు:

const duration = Temporal.Duration.from("P1D").add({ hours: 12 }).subtract({ minutes: 30 });
console.log(duration.toString()); // Output: P1DT11H30M

negated() పద్ధతి అన్ని భాగాలను ప్రతికూలంగా కలిగి ఉన్న కొత్త Temporal.Duration వస్తువును తిరిగి ఇస్తుంది:

const duration = Temporal.Duration.from("P1Y2M10DT2H30M");
const negatedDuration = duration.negated();
console.log(negatedDuration.toString()); // Output: -P1Y2M10DT2H30M

abs() పద్ధతి అన్ని భాగాలను సానుకూల విలువలుగా (పరమ విలువలు) కలిగి ఉన్న కొత్త Temporal.Duration వస్తువును తిరిగి ఇస్తుంది:

const duration = Temporal.Duration.from("-P1Y2M10DT2H30M");
const absoluteDuration = duration.abs();
console.log(absoluteDuration.toString()); // Output: P1Y2M10DT2H30M

with() పద్ధతి కొన్ని లేదా అన్ని లక్షణాలను కొత్త విలువలకు మార్చడంతో కొత్త Temporal.Duration ఉదాహరణను సృష్టించడానికి మిమ్మల్ని అనుమతిస్తుంది. వాదన వస్తువులో ఒక విలువ పేర్కొనకపోతే, వ్యవధి యొక్క అసలు విలువ ఉపయోగించబడుతుంది. ఉదాహరణకు:

const duration = Temporal.Duration.from("P1Y2M10DT2H30M");
const newDuration = duration.with({ years: 2, days: 5 });
console.log(newDuration.toString()); // Output: P2Y2M5DT2H30M

వ్యవధులను సాధారణీకరించడం

వ్యవధులు కొన్నిసార్లు సాధారణీకరించని రూపంలో వ్యక్తమవుతాయి (ఉదాహరణకు, P1Y12M, దీనిని P2Yకి సరళీకరించవచ్చు). normalized() పద్ధతి వ్యవధిని దాని అత్యంత కాంపాక్ట్ రూపానికి సరళీకరించడానికి ప్రయత్నిస్తుంది. అయినప్పటికీ, ఇది మారుతున్న నెలల పొడవుల యొక్క సంక్లిష్టతలను నిర్వహించడానికి ఒక సూచన తేదీని అవసరం. సరిగ్గా సాధారణీకరించడానికి, మీకు Temporal.PlainDate, Temporal.ZonedDateTime, లేదా Temporal.Instant ఉదాహరణ అవసరం.

ఉదాహరణకు, నెలలు మరియు రోజులను కలిగి ఉన్న వ్యవధిని సాధారణీకరించడానికి ఒక సూచన తేదీ అవసరం:

const duration = Temporal.Duration.from("P1M32D");
const referenceDate = Temporal.PlainDate.from("2024-01-01");
const normalizedDuration = duration.normalized({ relativeTo: referenceDate });
console.log(normalizedDuration.toString()); // Output: P2M1D

ఈ ఉదాహరణలో, వ్యవధి P1M32D జనవరి 1, 2024కి సంబంధించి సాధారణీకరించబడింది, ఫలితంగా P2M1D వస్తుంది, ఎందుకంటే జనవరికి 31 రోజులు ఉన్నాయి.

మీరు సమయ భాగాలతో మాత్రమే వ్యవహరిస్తుంటే (గంటలు, నిమిషాలు, సెకన్లు మొదలైనవి), మీరు సూచన తేదీ లేకుండా సాధారణీకరించవచ్చు:

const duration = Temporal.Duration.from("PT25H61M");
const normalizedDuration = duration.normalized({ relativeTo: null }); //or omit relativeTo argument
console.log(normalizedDuration.toString()); // Output: P1DT2H1M

వ్యవధులను పోల్చడం

మీరు compare() పద్ధతిని ఉపయోగించి వ్యవధులను పోల్చవచ్చు. ఈ పద్ధతి తిరిగి వస్తుంది:

const duration1 = Temporal.Duration.from("P1Y");
const duration2 = Temporal.Duration.from("P6M");

const comparisonResult = Temporal.Duration.compare(duration1, duration2);
console.log(comparisonResult); // Output: 1

ప్రయోగాత్మక ఉదాహరణలు

1. ఈవెంట్ వరకు సమయాన్ని లెక్కించడం

మీరు ఒక నిర్దిష్ట ఈవెంట్ వరకు మిగిలిన సమయాన్ని లెక్కించాలనుకుంటున్నారని అనుకోండి. ప్రస్తుత సమయాన్ని పొందడానికి Temporal.Now.zonedDateTimeISO()ని ఉపయోగించడం మరియు ఈవెంట్ తేదీని తీసివేయడం. ఈవెంట్ తేదీ దాటితే, అవుట్‌పుట్ ప్రతికూలంగా ఉంటుంది.

const eventDate = Temporal.ZonedDateTime.from({ timeZone: 'America/Los_Angeles', year: 2024, month: 12, day: 25, hour: 9, minute: 0, second: 0 });
const now = Temporal.Now.zonedDateTimeISO('America/Los_Angeles');

const durationUntilEvent = eventDate.since(now);

console.log(durationUntilEvent.toString()); // Output: e.g., P262DT14H30M (depending on the current date and time)

2. ప్రాజెక్ట్ టాస్క్ వ్యవధులను ట్రాక్ చేయడం

ప్రాజెక్ట్ నిర్వహణలో, మీరు టాస్క్‌ల యొక్క అంచనా లేదా వాస్తవ వ్యవధిని ట్రాక్ చేయడానికి Temporal.Durationని ఉపయోగించవచ్చు.

const task1EstimatedDuration = Temporal.Duration.from("PT8H"); // 8 గంటలు
const task2EstimatedDuration = Temporal.Duration.from("PT16H"); // 16 గంటలు

const totalEstimatedDuration = task1EstimatedDuration.add(task2EstimatedDuration);
console.log(`Total estimated duration: ${totalEstimatedDuration.toString()}`); // Output: Total estimated duration: P1DT

3. వయస్సును లెక్కించడం

ఖచ్చితంగా వయస్సును లెక్కించడానికి లీపు సంవత్సరాలు మరియు సమయ మండలాలను పరిగణనలోకి తీసుకోవలసి వచ్చినప్పటికీ, Temporal.Duration ఒక సహేతుకమైన అంచనాను అందించగలదు:

const birthDate = Temporal.PlainDate.from("1990-05-15");
const currentDate = Temporal.PlainDate.from("2024-01-20");

const ageDuration = currentDate.since(birthDate, { smallestUnit: 'years' });
console.log(`Estimated age: ${ageDuration.years} years`); // Output: Estimated age: 33 years

4. మానవ-రీడబుల్ వ్యవధులను ప్రదర్శించడం

తరచుగా, మీరు వ్యవధులను మానవ-రీడబుల్ ఆకృతిలో ప్రదర్శించవలసి ఉంటుంది. Temporal.Durationలో అంతర్నిర్మిత ఫార్మాటింగ్ విధులు లేనప్పటికీ, మీరు అనుకూల ఫార్మాటింగ్ తర్కాన్ని సృష్టించవచ్చు:

function formatDuration(duration) {
  const parts = [];
  if (duration.years) parts.push(`${duration.years} year${duration.years > 1 ? 's' : ''}`);
  if (duration.months) parts.push(`${duration.months} month${duration.months > 1 ? 's' : ''}`);
  if (duration.days) parts.push(`${duration.days} day${duration.days > 1 ? 's' : ''}`);
  if (duration.hours) parts.push(`${duration.hours} hour${duration.hours > 1 ? 's' : ''}`);
  if (duration.minutes) parts.push(`${duration.minutes} minute${duration.minutes > 1 ? 's' : ''}`);
  if (duration.seconds) parts.push(`${duration.seconds} second${duration.seconds > 1 ? 's' : ''}`);

  return parts.join(', ');
}

const duration = Temporal.Duration.from("P1Y2M10DT2H30M");
const formattedDuration = formatDuration(duration);
console.log(formattedDuration); // Output: 1 year, 2 months, 10 days, 2 hours, 30 minutes

అధునాతన వినియోగం మరియు పరిశీలనలు

1. సమయ మండల నిర్వహణ

సమయ మండల సరిహద్దులను దాటే లేదా పగటిపూట పొదుపు సమయ మార్పులను దాటే సమయ వ్యవధులతో వ్యవహరించేటప్పుడు, ఖచ్చితమైన గణనల కోసం Temporal.ZonedDateTimeని ఉపయోగించడం చాలా కీలకం. Temporal.PlainDate మరియు Temporal.PlainTimeని ఉపయోగించడం వలన ఏదైనా సమయ మండల మార్పిడిని నివారిస్తుంది.

2. చిన్న యూనిట్ మరియు రౌండింగ్

since() మరియు until() పద్ధతులు తరచుగా ఫలిత వ్యవధి కోసం చిన్న యూనిట్‌ను నిర్వచించడానికి ఎంపికలను అంగీకరిస్తాయి. ఉదాహరణకు, ఒక ఈవెంట్ *వరకు* సమయాన్ని లెక్కించడం మరియు ఫలితాలను రోజులకు పరిమితం చేయడం.

const eventDate = Temporal.PlainDate.from("2024-12-25");
const now = Temporal.PlainDate.from("2024-01-20");

const durationUntilEvent = now.until(eventDate, { smallestUnit: 'days' });

console.log(durationUntilEvent.toString()); //example output PT340D

3. లీప్ సెకండ్లు

టెంపోరల్ స్థానికంగా లీప్ సెకండ్లను పరిగణించదు. మీకు విపరీతమైన ఖచ్చితత్వం అవసరమైతే, మీరు లీప్ సెకండ్లను విడిగా నిర్వహించాలి.

4. IANA సమయ మండలాలు

టెంపోరల్ API IANA (ఇంటర్నెట్ అసైన్డ్ నంబర్స్ అథారిటీ) సమయ మండల డేటాబేస్‌పై ఆధారపడి ఉంటుంది. సమయ మండల మార్పిడులను ఖచ్చితంగా నిర్వహించడానికి మీ పరిసరాలకు IANA డేటాబేస్ యొక్క నవీకరించబడిన వెర్షన్ ఉందని నిర్ధారించుకోండి.

ఉత్తమ పద్ధతులు

సాధారణ లోపాలు

వివిధ సంస్కృతులలో నిజ-ప్రపంచ వినియోగ కేసులు

సమయ మండల వ్యత్యాసాలు మరియు సాంస్కృతిక సూక్ష్మ నైపుణ్యాలు ముఖ్యమైనవిగా ఉన్న గ్లోబల్ అప్లికేషన్లలో టెంపోరల్ API ప్రత్యేకంగా ఉపయోగపడుతుంది. ఇక్కడ కొన్ని ఉదాహరణలు ఉన్నాయి:

ముగింపు

Temporal.Duration జావాస్క్రిప్ట్‌లో సమయ వ్యవధులతో పని చేయడానికి ఒక బలమైన మరియు సహజమైన మార్గాన్ని అందిస్తుంది. దాని లక్షణాలు మరియు ఉత్తమ పద్ధతులను అర్థం చేసుకోవడం ద్వారా, మీరు మీ అప్లికేషన్‌లలో ఖచ్చితమైన మరియు నమ్మదగిన వ్యవధి గణనలను నమ్మకంగా చేయవచ్చు. టెంపోరల్ APIని స్వీకరించడం వలన పరిశుభ్రమైన, మరింత నిర్వహించదగిన కోడ్ వస్తుంది మరియు లెగసీ తేదీ మరియు సమయ నిర్వహణతో సంబంధం ఉన్న లోపాల ప్రమాదాన్ని తగ్గిస్తుంది.

మీరు టెంపోరల్ APIలోకి మరింత లోతుగా వెళ్లినప్పుడు, అధికారిక డాక్యుమెంటేషన్‌ను సంప్రదించాలని మరియు దాని సామర్థ్యాలను పూర్తిగా అర్థం చేసుకోవడానికి విభిన్న దృశ్యాలతో ప్రయోగాలు చేయాలని గుర్తుంచుకోండి. దాని ఆధునిక రూపకల్పన మరియు సమగ్ర లక్షణాలతో, జావాస్క్రిప్ట్‌లో తేదీలు, సమయాలు మరియు వ్యవధులను నిర్వహించే విధానాన్ని టెంపోరల్ మార్చడానికి సిద్ధంగా ఉంది.