ગુજરાતી

ચોક્કસ અને સાહજિક સમય અંતરાલની ગણતરીઓ માટે જાવાસ્ક્રિપ્ટના ટેમ્પોરલ APIનો ઉપયોગ કરવા માટેનો વ્યાપક માર્ગદર્શિકા, જેમાં મૂળભૂત સમયગાળાની રચનાથી લઈને અદ્યતન અંકગણિત અને ફોર્મેટિંગનો સમાવેશ થાય છે.

JavaScript ટેમ્પોરલ ડ્યુરેશન: સમય અંતરાલની ગણતરીમાં માસ્ટરી મેળવો

JavaScriptનું ટેમ્પોરલ API તારીખો, સમય અને સમય અંતરાલોને હેન્ડલ કરવાની આધુનિક અને શક્તિશાળી રીત રજૂ કરે છે. Temporal.Durationઑબ્જેક્ટ સમયની લંબાઈ રજૂ કરે છે, જે સમય અંતરાલો સાથે ગણતરીઓ કરવા માટે સ્પષ્ટ અને સાહજિક અભિગમ પૂરો પાડે છે. આ લેખ Temporal.Durationની વિગતોની ચર્ચા કરે છે, અને વિવિધ ઉપયોગના કિસ્સાઓ માટે સમયગાળો કેવી રીતે બનાવવો, ચાલાકી કરવી અને ફોર્મેટ કરવો તે દર્શાવે છે.

Temporal.Duration શું છે?

Temporal.Durationસમયના ગાળાનું પ્રતિનિધિત્વ કરે છે, તેને વર્ષો, મહિનાઓ, દિવસો, કલાકો, મિનિટો, સેકન્ડો અને સેકન્ડના અપૂર્ણાંકો (મિલિસેકન્ડ, માઇક્રોસેકન્ડ, નેનોસેકન્ડ) ના સંદર્ભમાં વ્યક્ત કરે છે. Dateઑબ્જેક્ટ્સથી વિપરીત જે સમયના ચોક્કસ બિંદુનું પ્રતિનિધિત્વ કરે છે, Temporal.Durationસમયની માત્રાનું પ્રતિનિધિત્વ કરે છે. તે ISO 8601 સમયગાળાના ફોર્મેટનું પાલન કરે છે (દા.ત., P1Y2M10DT2H30M 1 વર્ષ, 2 મહિના, 10 દિવસ, 2 કલાક અને 30 મિનિટ રજૂ કરે છે). Temporal API એ જૂના Dateઑબ્જેક્ટ કરતાં વધુ સાહજિક અને ઓછી ભૂલવાળો બનાવવા માટે રચાયેલ છે.

Temporal.Duration ઑબ્જેક્ટ્સ બનાવવી

Temporal.Durationઑબ્જેક્ટ્સ બનાવવા માટે ઘણી રીતો છે:

1. સાદા ઑબ્જેક્ટમાંથી

તમે ઇચ્છિત ગુણધર્મો સાથે ઑબ્જેક્ટ પસાર કરીને સમયગાળો બનાવી શકો છો:

const duration = new Temporal.Duration(1, 2, 10, 2, 30, 0, 0, 0);
console.log(duration.toString()); // આઉટપુટ: 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()); // આઉટપુટ: P1Y2M10DT2H30M

આ ખાસ કરીને ત્યારે ઉપયોગી છે જ્યારે સ્ટ્રિંગ ફોર્મેટમાં સંગ્રહિત અથવા બાહ્ય સ્ત્રોતમાંથી પ્રાપ્ત થયેલ સમયગાળા સાથે કામ કરવું હોય.

3. add()અને subtract()પદ્ધતિઓનો Temporal.Instant, Temporal.ZonedDateTimeવગેરે સાથે ઉપયોગ કરીને.

જ્યારે તમે અન્ય ટેમ્પોરલ પ્રકારો (જેમ કે 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()); // આઉટપુટ: PT5H

સમયગાળાના ઘટકોને ઍક્સેસ કરવું

તમે તેના ગુણધર્મોનો ઉપયોગ કરીને Temporal.Durationઑબ્જેક્ટના વ્યક્તિગત ઘટકોને ઍક્સેસ કરી શકો છો:

const duration = Temporal.Duration.from("P1Y2M10DT2H30M");
console.log(duration.years);      // આઉટપુટ: 1
console.log(duration.months);     // આઉટપુટ: 2
console.log(duration.days);       // આઉટપુટ: 10
console.log(duration.hours);      // આઉટપુટ: 2
console.log(duration.minutes);     // આઉટપુટ: 30
console.log(duration.seconds);     // આઉટપુટ: 0
console.log(duration.milliseconds); // આઉટપુટ: 0
console.log(duration.microseconds); // આઉટપુટ: 0
console.log(duration.nanoseconds);  // આઉટપુટ: 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()); // આઉટપુટ: P1Y5M4D

const subtractedDuration = duration1.subtract(duration2);
console.log(subtractedDuration.toString()); // આઉટપુટ: P10M26D

વધુ જટિલ ગણતરીઓ માટે તમે આ પદ્ધતિઓને પણ ચેઇન કરી શકો છો:

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

negated()પદ્ધતિ બધા ઘટકોને નકારાત્મક સાથે નવું Temporal.Durationઑબ્જેક્ટ પરત કરે છે:

const duration = Temporal.Duration.from("P1Y2M10DT2H30M");
const negatedDuration = duration.negated();
console.log(negatedDuration.toString()); // આઉટપુટ: -P1Y2M10DT2H30M

abs()પદ્ધતિ બધા ઘટકોને હકારાત્મક મૂલ્યો (સંપૂર્ણ મૂલ્યો) તરીકે નવું Temporal.Durationઑબ્જેક્ટ પરત કરે છે:

const duration = Temporal.Duration.from("-P1Y2M10DT2H30M");
const absoluteDuration = duration.abs();
console.log(absoluteDuration.toString()); // આઉટપુટ: P1Y2M10DT2H30M

with()પદ્ધતિ તમને અમુક, અથવા બધા, ગુણધર્મોને નવા મૂલ્યોમાં બદલીને Temporal.Durationઇન્સ્ટન્સ બનાવવાની મંજૂરી આપે છે. જો દલીલ ઑબ્જેક્ટમાં કોઈ મૂલ્ય ઉલ્લેખિત નથી, તો સમયગાળાનું મૂળ મૂલ્ય વપરાશે. ઉદાહરણ તરીકે:

const duration = Temporal.Duration.from("P1Y2M10DT2H30M");
const newDuration = duration.with({ years: 2, days: 5 });
console.log(newDuration.toString()); // આઉટપુટ: 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()); // આઉટપુટ: P2M1D

આ ઉદાહરણમાં, જાન્યુઆરી 1, 2024 ના સંદર્ભમાં P1M32Dસમયગાળો સામાન્ય કરવામાં આવે છે, જેના પરિણામે P2M1Dઆવે છે કારણ કે જાન્યુઆરીમાં 31 દિવસ હોય છે.

જો તમે ફક્ત સમયના ઘટકો (કલાક, મિનિટ, સેકન્ડ વગેરે) સાથે વ્યવહાર કરી રહ્યાં છો, તો તમે સંદર્ભ તારીખ વિના સામાન્ય કરી શકો છો:

const duration = Temporal.Duration.from("PT25H61M");
const normalizedDuration = duration.normalized({ relativeTo: null }); //અથવા relativeTo દલીલને છોડી દો
console.log(normalizedDuration.toString()); // આઉટપુટ: P1DT2H1M

સમયગાળાની સરખામણી કરવી

તમે compare()પદ્ધતિનો ઉપયોગ કરીને સમયગાળાની તુલના કરી શકો છો. આ પદ્ધતિ પરત કરે છે:

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

const comparisonResult = Temporal.Duration.compare(duration1, duration2);
console.log(comparisonResult); // આઉટપુટ: 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()); // આઉટપુટ: દા.ત., P262DT14H30M (વર્તમાન તારીખ અને સમય પર આધાર રાખીને)

2. પ્રોજેક્ટ ટાસ્ક સમયગાળાને ટ્રૅક કરવું

પ્રોજેક્ટ મેનેજમેન્ટમાં, તમે કાર્યોના અંદાજિત અથવા વાસ્તવિક સમયગાળાને ટ્રૅક કરવા માટે Temporal.Durationનો ઉપયોગ કરી શકો છો.

const task1EstimatedDuration = Temporal.Duration.from("PT8H"); // 8 કલાક
const task2EstimatedDuration = Temporal.Duration.from("PT16H"); // 16 કલાક

const totalEstimatedDuration = task1EstimatedDuration.add(task2EstimatedDuration);
console.log(`કુલ અંદાજિત સમયગાળો: ${totalEstimatedDuration.toString()}`); // આઉટપુટ: કુલ અંદાજિત સમયગાળો: 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(`અંદાજિત ઉંમર: ${ageDuration.years} વર્ષ`); // આઉટપુટ: અંદાજિત ઉંમર: 33 વર્ષ

4. માનવ-વાંચી શકાય તેવા સમયગાળાને પ્રદર્શિત કરવું

ઘણીવાર, તમારે માનવ-વાંચી શકાય તેવા ફોર્મેટમાં સમયગાળાને પ્રદર્શિત કરવાની જરૂર પડે છે. જ્યારે Temporal.Durationમાં બિલ્ટ-ઇન ફોર્મેટિંગ ફંક્શન્સ નથી, તો તમે કસ્ટમ ફોર્મેટિંગ લોજિક બનાવી શકો છો:

function formatDuration(duration) {
  const parts = [];
  if (duration.years) parts.push(`${duration.years} વર્ષ${duration.years > 1 ? 'ો' : ''}`);
  if (duration.months) parts.push(`${duration.months} મહિનો${duration.months > 1 ? 'ના' : ''}`);
  if (duration.days) parts.push(`${duration.days} દિવસ${duration.days > 1 ? 'ો' : ''}`);
  if (duration.hours) parts.push(`${duration.hours} કલાક${duration.hours > 1 ? 'ો' : ''}`);
  if (duration.minutes) parts.push(`${duration.minutes} મિનિટ${duration.minutes > 1 ? 'ો' : ''}`);
  if (duration.seconds) parts.push(`${duration.seconds} સેકન્ડ${duration.seconds > 1 ? 'ો' : ''}`);

  return parts.join(', ');
}

const duration = Temporal.Duration.from("P1Y2M10DT2H30M");
const formattedDuration = formatDuration(duration);
console.log(formattedDuration); // આઉટપુટ: 1 વર્ષ, 2 મહિના, 10 દિવસ, 2 કલાક, 30 મિનિટ

અદ્યતન વપરાશ અને વિચારણાઓ

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()); //ઉદાહરણ આઉટપુટ PT340D

3. લીપ સેકન્ડ્સ

ટેમ્પોરલ લીપ સેકન્ડ્સ માટે મૂળરૂપે જવાબદાર નથી. જો તમને અત્યંત ચોકસાઈની જરૂર હોય, તો તમારે લીપ સેકન્ડ્સને અલગથી હેન્ડલ કરવાની જરૂર પડશે.

4. IANA સમય ઝોન

ટેમ્પોરલ API IANA (ઇન્ટરનેટ એસાઇન્ડ નંબર્સ ઓથોરિટી) સમય ઝોન ડેટાબેઝ પર આધાર રાખે છે. સમય ઝોન રૂપાંતરણોને સચોટ રીતે હેન્ડલ કરવા માટે ખાતરી કરો કે તમારા પર્યાવરણમાં IANA ડેટાબેઝનું અદ્યતન સંસ્કરણ છે.

શ્રેષ્ઠ પ્રયાસો

સામાન્ય મુશ્કેલીઓ

વિવિધ સંસ્કૃતિઓમાં વાસ્તવિક દુનિયાના ઉપયોગના કિસ્સાઓ

ટેમ્પોરલ API વૈશ્વિક એપ્લિકેશન્સમાં ખાસ કરીને ફાયદાકારક હોઈ શકે છે જ્યાં સમય ઝોનના તફાવતો અને સાંસ્કૃતિક ઘોંઘાટ નોંધપાત્ર છે. અહીં કેટલાક ઉદાહરણો છે:

નિષ્કર્ષ

Temporal.DurationJavaScriptમાં સમય અંતરાલો સાથે કામ કરવાની મજબૂત અને સાહજિક રીત પૂરી પાડે છે. તેની વિશેષતાઓ અને શ્રેષ્ઠ પ્રયાસોને સમજીને, તમે તમારી એપ્લિકેશન્સમાં સચોટ અને વિશ્વસનીય સમયગાળાની ગણતરીઓ આત્મવિશ્વાસથી કરી શકો છો. ટેમ્પોરલ API ને અપનાવવાથી સ્વચ્છ, વધુ જાળવણી કરી શકાય તેવો કોડ મળે છે અને જૂના તારીખ અને સમય હેન્ડલિંગ સાથે સંકળાયેલા ભૂલોનું જોખમ ઘટે છે.

જેમ જેમ તમે ટેમ્પોરલ API માં ઊંડાણપૂર્વક તપાસ કરો છો, તેમ તેની ક્ષમતાઓને સંપૂર્ણપણે સમજવા માટે સત્તાવાર દસ્તાવેજોનો સંપર્ક કરવાનું અને વિવિધ દૃશ્યો સાથે પ્રયોગ કરવાનું યાદ રાખો. તેની આધુનિક ડિઝાઇન અને વ્યાપક સુવિધાઓ સાથે, ટેમ્પોરલ જાવાસ્ક્રિપ્ટમાં તારીખો, સમય અને સમયગાળાને હેન્ડલ કરવાની રીતમાં ક્રાંતિ લાવવા માટે તૈયાર છે.