JavaScript లో Math & Date Objects: సంపూర్ణ మార్గదర్శి

🟨 JavaScript (ES2026+) 🟢 Lesson 17 of 25 📂 Part 03: Functions & Data (Page 6 of 6) ⏱️ 16 min read
📌 Covered in this lesson: Math.round · Math.floor · Math.ceil · Math.trunc · Math.random Golden Formula · Math.max / min · Date Constructor · getFullYear & getMonth Gotchas · Timestamps · Date Difference Calculation · Age & Countdown Project

సాఫ్ట్‌వేర్ అప్లికేషన్లలో కేవలం అక్షరాలతోనే కాకుండా, ఖచ్చితమైన గణాంకాలు (Discount లెక్కించడం, Random OTP సృష్టించడం, గేమ్‌లలో స్కోర్ రౌండింగ్) మరియు సమయ పరిమితులు (Booking dates, Subscription expiry, User age, పోస్ట్ పెట్టి ఎన్ని నిమిషాలు అయింది) లెక్కించాల్సి వస్తుంది.

ద్వంద్వ అనాలజీ (The Dual Real-World Analogy):
1. Math Object = సైంటిఫిక్ కాలిక్యులేటర్ (Scientific Toolkit): కాలిక్యులేటర్‌ని మనం కొత్తగా తయారు చేయనవసరం లేదు; ఉన్న బటన్ నొక్కితే నేరుగా ఫలితం వస్తుంది. Math ఆబ్జెక్ట్ కూడా అంతే, ఇది జావాస్క్రిప్ట్ సిద్ధంగా అందించిన ఒక టూల్‌బాక్స్.
2. Date Object = డిజిటల్ క్యాలెండర్ & స్టాప్‌వాచ్ (Calendar & Wristwatch): ప్రపంచంలో సమయం 1970 జనవరి 1 నుండి నిరంతరం మిల్లీసెకన్లలో రికార్డ్ అవుతోంది. ఈ సమయాన్ని మనకు అర్థమయ్యే రోజులు, నెలలు, సంవత్సరాల రూపంలో చూపించే పరికరమే Date ఆబ్జెక్ట్.

ఈ పాఠంతో మనం Part 03 (Functions & Data) ని విజయవంతంగా పూర్తి చేసుకుంటున్నాం. ఇక్కడ కోడింగ్ రూల్స్‌తో పాటు, ఇంటర్వ్యూలలో తరచుగా అడిగే 0-Indexed Month Gotcha, మరియు రెండు తేదీల మధ్య వ్యత్యాసం లెక్కించే రియల్-వరల్డ్ లాజిక్‌ను నేర్చుకుందాం.

1Math Object అంటే ఏమిటి? (Static Object)

సాధారణంగా జావాస్క్రిప్ట్ లో ఆబ్జెక్టులను సృష్టించేటప్పుడు లేదా క్లాసులను వాడేటప్పుడు మనం new కీవర్డ్ వాడతాం (ఉదాహరణకు new Date()). కానీ Math ఆబ్జెక్ట్ కి new వాడకూడదు.

💡 కీలక భావన: Math is a Namespace / Static Object

జావాస్క్రిప్ట్ ఇంజిన్ ముందే సిద్ధం చేసిన గణిత సూత్రాలు మరియు స్థిరరాశుల (constants) సమాహారమే Math. దీనికి కన్‌స్ట్రక్టర్ ఉండదు. కాబట్టి new Math() అని రాస్తే కంప్యూటర్ TypeError: Math is not a constructor అనే ఎర్రర్ ఇస్తుంది. ఎల్లప్పుడూ నేరుగా Math.method() లేదా Math.PI అని మాత్రమే యాక్సెస్ చేయాలి.

ప్రముఖ స్థిరరాశులు (Constants):

  • Math.PI ➔ 3.141592653589793 (వృత్తం వైశాల్యం, చుట్టుకొలత కోసం).
  • Math.E ➔ 2.718281828459045 (యూలర్ సంఖ్య, కాంపౌండ్ ఇంట్రెస్ట్/లగారిథమ్స్ లో వాడతారు).
2Rounding Methods లోతైన పోలిక (round, floor, ceil, trunc)

దశాంశ సంఖ్యలను (decimal numbers) పూర్ణాంకాలుగా (integers) మార్చడానికి జావాస్క్రిప్ట్ 4 ప్రాథమిక మెథడ్స్ అందిస్తుంది. బిగినర్స్ తరచుగా ధన సంఖ్యలు (positive) మరియు రుణ సంఖ్యల (negative) విషయంలో వీటి ఫలితాలను చూసి అయోమయానికి గురవుతారు:

🏢 లిఫ్ట్ & భవనం అనాలజీ (Floor vs Ceil Analogy):

ఒక అపార్ట్‌మెంట్‌లో 4వ మరియు 5వ అంతస్తుల మధ్య లిఫ్ట్ ఆగిపోయిందనుకోండి (4.6 స్థానం).
• Floor (నేల): ఎప్పుడూ కింద ఉన్న నేల వైపు మాత్రమే లాగుతుంది ➔ Math.floor(4.6) = 4.
• Ceiling (పైకప్పు): ఎప్పుడూ పైనున్న పైకప్పు వైపు మాత్రమే నెడుతుంది ➔ Math.ceil(4.1) = 5.
• Round (సాధారణ రౌండింగ్): మధ్య స్థానం (0.5) కంటే దగ్గరగా ఎటు ఉంటే అటు వెళ్తుంది ➔ 4.4 ➔ 4, 4.5 ➔ 5.
• Trunc (కత్తిరింపు): దశాంశ బిందువు తర్వాత ఉన్న భాగాన్ని నిర్దాక్షిణ్యంగా నరికేస్తుంది (సరళంగా తీసివేస్తుంది).

ఇన్‌పుట్ సంఖ్య Math.round() (సమీప సంఖ్య) Math.floor() (ఎప్పుడూ కిందికి) Math.ceil() (ఎప్పుడూ పైకి) Math.trunc() (దశాంశాలు కట్)
4.7 5 4 5 4
4.4 4 4 5 4
4.5 5 4 5 4
-4.2 -4 -5 (చిన్న సంఖ్య వైపు) -4 (పెద్ద సంఖ్య వైపు) -4 (సింపుల్ గా .2 తీసేసింది)
-4.8 -5 -5 -4 -4
⚠️ నెగటివ్ నంబర్స్ గమనిక:

సంఖ్యా రేఖ (Number Line) పై -5 అనేది -4 కంటే చిన్నది! అందుకే Math.floor(-4.2) విలువ -5 అవుతుంది, కానీ Math.trunc(-4.2) విలువ -4 అవుతుంది. కేవలం దశాంశాలు తీసివేయాలనుకుంటే ES6 లో వచ్చిన Math.trunc() ని వాడటం ఉత్తమం!

3Math.random() & ది గోల్డెన్ ఫార్ములా [min, max]

Math.random() ని కాల్ చేసిన ప్రతిసారీ అది 0 నుండి 1 లోపు (0 రావచ్చు, కానీ ఎప్పటికీ ఖచ్చితమైన 1 రాదు: 0 <= x < 1) ఒక యాదృచ్ఛిక ఫ్లోటింగ్ పాయింట్ సంఖ్యను ఇస్తుంది (ఉదాహరణకు 0.4829148...).

కానీ వాస్తవ ప్రాజెక్టులలో మనకు ఇలాంటి దశాంశాలు సరిపోవు. ఉదాహరణకు లూడో గేమ్‌లో 1 నుండి 6 మధ్య సంఖ్య కావాలి, లేదా మొబైల్ OTP కోసం 100000 నుండి 999999 మధ్య సంఖ్య కావాలి. దీని కోసం ప్రపంచవ్యాప్తంగా డెవలపర్లు వాడే గోల్డెన్ ఫార్ములా ఇది:

🎯 The Universal Random Formula (పూర్ణాంకాల కోసం):

Math.floor(Math.random() * (max - min + 1)) + min

ఈ సూత్రం వెనుక గణిత రహస్యం:
1. (max - min + 1) ➔ మొత్తం ఎన్ని సంఖ్యలు సాధ్యమో (రేంజ్ పరిమాణం) తెలుపుతుంది. ఉదా: 1 నుండి 6 అంటే మొత్తం 6 - 1 + 1 = 6 సంఖ్యలు.
2. Math.random() * 6 ➔ 0.000... నుండి 5.999... మధ్య సంఖ్యను ఇస్తుంది.
3. Math.floor(...) ➔ దశాంశాలను తొలగించి పూర్ణాంకం 0, 1, 2, 3, 4, 5 లో ఒకదాన్ని ఇస్తుంది.
4. + min (అంటే + 1) ➔ ఫలితాన్ని మన కనీస విలువకు జరిపి 1, 2, 3, 4, 5, 6 గా మారుస్తుంది!

4ఇతర ముఖ్యమైన Math ఫంక్షన్లు

జావాస్క్రిప్ట్ లో సాధారణ అంకగణితానికి ఉపయోగపడే మరికొన్ని ప్రముఖ పద్ధతులు:

Method వివరణ ఉదాహరణ & ఫలితం
Math.max(a, b, c...) ఇచ్చిన సంఖ్యలలో అత్యధిక విలువను రిటర్న్ చేస్తుంది. Math.max(10, 45, 23) ➔ 45
Math.min(a, b, c...) ఇచ్చిన సంఖ్యలలో అత్యల్ప విలువను రిటర్న్ చేస్తుంది. Math.min(10, 45, 23) ➔ 10
Math.pow(base, exp) ఘాతాంకం (Power) లెక్కిస్తుంది. (ES6 లోని base ** exp లాగే). Math.pow(2, 5) ➔ 32
Math.sqrt(x) వర్గమూలం (Square Root) లెక్కిస్తుంది. Math.sqrt(144) ➔ 12
Math.abs(x) రుణ సంఖ్యను ధన సంఖ్యగా మార్చే సంపూర్ణ విలువ (Absolute Value). Math.abs(-50) ➔ 50

💡 ప్రో-టిప్: Array లో అత్యధిక/అత్యల్ప సంఖ్యను ఎలా కనుక్కోవాలి?

Math.max([10, 20, 30]) అని నేరుగా అర్రే పాస్ చేస్తే NaN వస్తుంది! ఎందుకంటే Math.max సంఖ్యలను విడివిడి ఆర్గ్యుమెంట్లుగా కోరుకుంటుంది. కాబట్టి ES6 Spread ఆపరేటర్ వాడాలి:
const scores = [85, 92, 78, 99];
const highest = Math.max(...scores); // 99 ✅

5Date Object & Unix Epoch సమయ రహస్యం

కంప్యూటర్లకు మన క్యాలెండర్లు, వారాలు, గంటల పేర్లు సహజంగా తెలియవు. మరి ప్రోగ్రామింగ్ ప్రపంచంలో సమయాన్ని ఎలా లెక్కిస్తారు?

⏳ Unix Epoch (సమయ ప్రారంభ బిందువు):

ప్రపంచవ్యాప్తంగా కంప్యూటర్ వ్యవస్థలు 1970 జనవరి 1, అర్ధరాత్రి 00:00:00 UTC (గ్రీన్‌విచ్ సమయం) ని ప్రామాణిక జీరో పాయింట్ (Epoch) గా నిర్ణయించుకున్నాయి.
ఆ క్షణం నుండి ఇప్పటివరకు గడిచిన మిల్లీసెకన్ల (Milliseconds) సంఖ్యను కంప్యూటర్ నిల్వ చేసుకుంటుంది. new Date() అని రాసినప్పుడు జావాస్క్రిప్ట్ మీ సిస్టమ్ క్లాక్ నుండి ఆ సంఖ్యను తీసుకుని, దాన్ని అర్థవంతమైన తేదీగా మారుస్తుంది.

Date ఆబ్జెక్ట్‌ను సృష్టించే 4 పద్ధతులు:

  1. new Date() ➔ ఈ క్షణపు ఖచ్చితమైన ప్రస్తుత తేదీ మరియు సమయం.
  2. new Date("2026-10-24T15:30:00") ➔ ISO డేట్ స్ట్రింగ్ ద్వారా నిర్దిష్ట తేదీని ఇవ్వడం.
  3. new Date(year, monthIndex, day, hours, minutes, seconds) ➔ విడివిడి సంఖ్యలతో క్రియేట్ చేయడం.
  4. new Date(milliseconds) ➔ 1970 నుండి గడిచిన మిల్లీసెకన్లను నేరుగా ఇవ్వడం.
6Date Methods & 3 బిగ్గెస్ట్ Gotchas (నెలల ఇండెక్స్ 0-11)

Date ఆబ్జెక్ట్ లోని డేటాను చదవడానికి (Get) మరియు మార్చడానికి (Set) అనేక బిల్ట్-ఇన్ మెథడ్స్ ఉన్నాయి. కానీ ఇందులో బిగినర్స్ ని భయపెట్టే 3 పెద్ద చిక్కులు (Gotchas) ఉన్నాయి:

🚨 The 3 Dangerous Date Gotchas:

1. నెలలు 0 నుండి మొదలవుతాయి (0-Indexed Months):
జనవరి అంటే 0, డిసెంబర్ అంటే 11! మీరు new Date(2026, 9, 24) అని రాస్తే అది 9వ నెల (సెప్టెంబర్) కాదు, అక్టోబర్! క్యాలెండర్‌లో చూపించేటప్పుడు ఎల్లప్పుడూ date.getMonth() + 1 అని రాయాలి.

2. getDate() vs getDay() కన్‌ఫ్యూజన్:
• getDate() ➔ నెలకు సంబంధించిన తారీఖు (1 నుండి 31).
• getDay() ➔ వారంలోని రోజు (0 = ఆదివారం, 1 = సోమవారం ... 6 = శనివారం).

3. getYear() ని ఎప్పుడూ వాడకండి:
getYear() డిప్రికేట్ అయిపోయింది (అది 1900 నుండి సంవత్సరాలను లెక్కిస్తుంది). ఎల్లప్పుడూ 4 అంకెల పూర్తి సంవత్సరం కోసం getFullYear() మాత్రమే వాడాలి!

Method విలువ పరిధి (Range) వివరణ & గమనిక
getFullYear() 4-Digit Year (ఉదా: 2026) పూర్తి సంవత్సరాన్ని ఇస్తుంది.
getMonth() 0 - 11 జాగ్రత్త: 0 = Jan, 9 = Oct, 11 = Dec.
getDate() 1 - 31 నెలలోని తారీఖు (Day of Month).
getDay() 0 - 6 వారంలోని రోజు (0 = Sunday, 6 = Saturday).
getHours() 0 - 23 24-గంటల ఫార్మాట్ లో ప్రస్తుత గంట.
getMinutes() 0 - 59 నిమిషాలు.
getSeconds() 0 - 59 సెకన్లు.
getTime() సంఖ్య (Milliseconds) 1970 Jan 1 నుండి ఇప్పటివరకు మొత్తం మిల్లీసెకన్లు (Timestamp).
7Master Code Demo: Core Operations ఒకేచోట

Math రౌండింగ్, రాండమ్ సంఖ్యల సూత్రం, మరియు Date ఆబ్జెక్ట్ నుండి వివరాలు వెలికితీసే ఏకైక సమగ్ర కోడ్ ఉదాహరణ ఇది. Node.js v22 లో టెస్ట్ చేయబడిన వాస్తవ ఔట్‌పుట్‌ను గమనించండి:

JavaScript — Math & Date Master Demo ▶ Run Code
// 1. Math Rounding విశ్లేషణ
console.log("--- Math Rounding ---");
console.log("Math.round(4.7):", Math.round(4.7)); // 5
console.log("Math.round(4.4):", Math.round(4.4)); // 4
console.log("Math.floor(4.9):", Math.floor(4.9)); // 4 (ఎల్లప్పుడూ కిందికి)
console.log("Math.ceil(4.1):", Math.ceil(4.1));   // 5 (ఎల్లప్పుడూ పైకి)
console.log("Math.trunc(-4.9):", Math.trunc(-4.9)); // -4 (దశాంశాలు కట్)
console.log("Math.floor(-4.9):", Math.floor(-4.9)); // -5 (మరింత చిన్న విలువకు)

// 2. నిర్దిష్ట రేంజ్ లో Random పూర్ణాంకం (Golden Formula)
function getRandomInt(min, max) {
  return Math.floor(Math.random() * (max - min + 1)) + min;
}
console.log("Random Dice Roll (1 to 6):", getRandomInt(1, 6));

// 3. Min, Max, Pow, Sqrt
const scores = [88, 95, 62, 99, 74];
console.log("Max Score:", Math.max(...scores));
console.log("Min Score:", Math.min(...scores));
console.log("2^5 (Pow):", Math.pow(2, 5));
console.log("Sqrt(144):", Math.sqrt(144));

// 4. Date Operations & 0-Index Gotchas
console.log("--- Date Operations ---");
const sampleDate = new Date(2026, 9, 24, 15, 30, 0); // Month 9 = October!
console.log("Year:", sampleDate.getFullYear());
console.log("Month (0-11):", sampleDate.getMonth(), "(October)");
console.log("Date (1-31):", sampleDate.getDate());
console.log("Day (0-6):", sampleDate.getDay(), "(Saturday)");

// 5. రెండు తేదీల మధ్య రోజుల వ్యత్యాసం (Timestamp Difference)
const d1 = new Date("2026-10-01");
const d2 = new Date("2026-10-25");
const diffMs = d2.getTime() - d1.getTime(); // మిల్లీసెకన్ల తేడా
const diffDays = diffMs / (1000 * 60 * 60 * 24); // రోజుల్లోకి మార్పు
console.log("Days between d1 and d2:", diffDays);
Output:
--- Math Rounding ---
Math.round(4.7): 5
Math.round(4.4): 4
Math.floor(4.9): 4
Math.ceil(4.1): 5
Math.trunc(-4.9): -4
Math.floor(-4.9): -5
Random Dice Roll (1 to 6): 4
Max Score: 99
Min Score: 62
2^5 (Pow): 32
Sqrt(144): 12
--- Date Operations ---
Year: 2026
Month (0-11): 9 (October)
Date (1-31): 24
Day (0-6): 6 (Saturday)
Days between d1 and d2: 24
  • Math.floor(-4.9) విలువ -5 గా మారడాన్ని గమనించండి, కానీ Math.trunc(-4.9) కేవలం -4 ని ఇచ్చింది.
  • sampleDate.getMonth() మనకు 9 ని ఇచ్చింది, ఎందుకంటే జనవరి 0 నుండి ప్రారంభం అవుతుంది.
  • తేదీల మధ్య వ్యవధిని లెక్కించడానికి getTime() ఇచ్చే మిల్లీసెకన్లను రోజులకు మార్చడానికి 1000 * 60 * 60 * 24 చేత భాగించాం.
8Timestamps & తేదీల వ్యత్యాసం లెక్కించడం

డేటాబేస్‌లలో రికార్డులు ఎప్పుడు సృష్టించబడ్డాయో (created_at) ట్రాక్ చేయడానికి లేదా ఏదైనా ఒక ఫంక్షన్ రన్ అవ్వడానికి ఎన్ని మిల్లీసెకన్లు పట్టిందో కొలవడానికి Timestamp ఉపయోగిస్తాం.

ప్రస్తుత టైమ్‌స్టాంప్ పొందే 2 మార్గాలు:

  • Date.now() ➔ ఎటువంటి ఆబ్జెక్ట్ సృష్టించకుండా నేరుగా ప్రస్తుత మిల్లీసెకన్ల సంఖ్యను ఇస్తుంది (అత్యంత వేగవంతమైనది).
  • new Date().getTime() ➔ ఒక డేట్ ఆబ్జెక్ట్ ద్వారా టైమ్‌స్టాంప్ పొందడం.

📐 మిల్లీసెకన్ల మార్పిడి లెక్కలు (Conversion Math):

• 1 సెకను = 1000 ms
• 1 నిమిషం = 1000 * 60 = 60,000 ms
• 1 గంట = 1000 * 60 * 60 = 3,600,000 ms
• 1 రోజు = 1000 * 60 * 60 * 24 = 86,400,000 ms

9Beginners చేసే 5 సాధారణ తప్పులు (Common Mistakes)

Math మరియు Date కాన్సెప్టులతో పనిచేసేటప్పుడు బిగినర్స్ అనుకోకుండా చేసే ప్రధాన తప్పిదాలు:

1. new Math() అని రాయడం:

const m = new Math(); // ❌ TypeError: Math is not a constructor
సరిదిద్దడం: Math అనేది క్లాస్ కాదు, ఆబ్జెక్ట్. నేరుగా Math.floor() అని వాడాలి.

2. getMonth() కి +1 కలపడం మర్చిపోవడం:

ఒక యూజర్ అక్టోబర్ 24న రిజిస్టర్ అయితే, today.getMonth() కేవలం 9 మాత్రమే ఇస్తుంది. యూజర్‌కి స్క్రీన్ పై తేదీ చూపేటప్పుడు today.getMonth() + 1 అని రాయకపోతే ఒక నెల వెనుకబడి కనిపిస్తుంది.

3. getDate() కి బదులు getDay() వాడటం:

నేటి తారీఖు 24 అయితే, today.getDay() మీకు 6 (శనివారం) ఇస్తుంది! తారీఖు కోసం ఎల్లప్పుడూ getDate() మాత్రమే వాడాలి.

4. అర్రే పై నేరుగా Math.max() వాడటం:

Math.max([10, 50, 30]); // ❌ NaN
సరిదిద్దడం: అర్రే ఎలిమెంట్లను విప్పదీయడానికి Spread Operator వాడాలి: Math.max(...[10, 50, 30]); // 50 ✅.

5. రెండు Date ఆబ్జెక్టులను '===' తో పోల్చడం:

new Date("2026-10-24") === new Date("2026-10-24"); // ❌ false!
జావాస్క్రిప్ట్ లో రెండు విభిన్న ఆబ్జెక్టుల మెమరీ అడ్రస్‌లు వేర్వేరు. సమయం సమానమా కాదా అని చూడాలంటే వాటి టైమ్‌స్టాంప్‌లను పోల్చాలి:
d1.getTime() === d2.getTime(); // ✅ true

10Real-World Try-It: Smart Age & Countdown Project

ఈ క్రింది ప్రాజెక్ట్‌లో మనం ఒక యూజర్ పుట్టిన తేదీని బట్టి వారి ప్రస్తుత పూర్తి వయస్సు (Years), వారి తర్వాతి పుట్టినరోజుకు ఇంకా ఎన్ని రోజుల సమయం మిగిలి ఉందో కౌంట్‌డౌన్, మరియు లాగిన్ సెక్యూరిటీ కోసం ఒక రాండమ్ 6-అంకెల OTP ని జనరేట్ చేసే ప్రొడక్షన్-గ్రేడ్ ఫంక్షన్‌ను నిర్మిస్తున్నాం:

🚀 మీరే స్వయంగా Try చేయండి! (Live Age & Countdown Utility)

ఈ కోడ్‌ను మన ఆన్‌లైన్ కంపైలర్ లో రన్ చేసి మీ స్వంత పుట్టినరోజు తేదీని మార్చి పరీక్షించండి:

JavaScript — Smart Age & Security OTP Application ▶ Run in Compiler
// 1. సెక్యూర్ 6-అంకెల రాండమ్ OTP జనరేటర్
function generateSecurityOTP(digits = 6) {
  const min = Math.pow(10, digits - 1); // 100000
  const max = Math.pow(10, digits) - 1; // 999999
  return Math.floor(Math.random() * (max - min + 1)) + min;
}

// 2. వయస్సు మరియు తర్వాతి బర్త్‌డే కౌంట్‌డౌన్ కాలిక్యులేటర్
function calculateAgeAndCountdown(birthDateString) {
  const now = new Date("2026-10-24T12:00:00"); // స్థిర ప్రస్తుత తేదీ (టెస్టింగ్ కోసం)
  const birth = new Date(birthDateString);

  // పూర్తి సంవత్సరాలలో వయస్సు లెక్క
  let years = now.getFullYear() - birth.getFullYear();
  const monthDiff = now.getMonth() - birth.getMonth();

  // ఈ సంవత్సరం బర్త్‌డే ఇంకా రాకపోతే 1 సంవత్సరం తగ్గించాలి
  if (monthDiff < 0 || (monthDiff === 0 && now.getDate() < birth.getDate())) {
    years--;
  }

  // తర్వాతి బర్త్‌డే తేదీని నిర్ణయించడం
  let nextBirthday = new Date(now.getFullYear(), birth.getMonth(), birth.getDate());
  if (now > nextBirthday) {
    // ఈ ఏడాది పుట్టినరోజు అయిపోతే వచ్చే ఏడాదికి సెట్ చేయాలి
    nextBirthday.setFullYear(now.getFullYear() + 1);
  }

  // మిల్లీసెకన్ల తేడా నుండి రోజులను కనుగొనడం
  const diffMs = nextBirthday.getTime() - now.getTime();
  const daysLeft = Math.ceil(diffMs / (1000 * 60 * 60 * 24));

  return {
    ageInYears: years,
    daysUntilNextBirthday: daysLeft,
    generatedSecurityOTP: generateSecurityOTP(6)
  };
}

// నవంబర్ 15, 2000 న జన్మించిన యూజర్ డేటా
const profile = calculateAgeAndCountdown("2000-11-15");
console.log("ప్రస్తుత వయస్సు (సంవత్సరాలు):", profile.ageInYears);
console.log("తర్వాతి బర్త్‌డేకి మిగిలిన రోజులు:", profile.daysUntilNextBirthday);
console.log("సెక్యూరిటీ లాగిన్ OTP:", profile.generatedSecurityOTP);
Output:
ప్రస్తుత వయస్సు (సంవత్సరాలు): 25
తర్వాతి బర్త్‌డేకి మిగిలిన రోజులు: 22
సెక్యూరిటీ లాగిన్ OTP: 719812
👉 Our Compiler లో JavaScript రన్ చేయండి
11ఆలోచింపజేసే ప్రాక్టీస్ ప్రశ్నలు & సమాధానాలు

ఈ క్రింది ప్రశ్నలకు స్వయంగా సమాధానం చెప్పడానికి ప్రయత్నించండి, ఆపై డ్రాప్‌డౌన్ తెరిచి వివరణను సరిచూసుకోండి:

  1. Math.floor(-3.1) మరియు Math.trunc(-3.1) ల ఔట్‌పుట్ ఏమిటి? ఎందుకు?
  2. Math.random() ఉపయోగించి 10 నుండి 20 మధ్య (10 మరియు 20 కలుపుకొని) రాండమ్ పూర్ణాంకం ఎలా పొందాలి?
  3. const d = new Date(2025, 0, 15); లోని నెల ఏది?
  4. రెండు డేట్ ఆబ్జెక్టులు ఒకే క్షణాన్ని సూచిస్తున్నాయో లేదో తెలుసుకోవడానికి d1 === d2 ఎందుకు పని చేయదు?
  5. ఒక అప్లికేషన్‌లో ప్రస్తుత సమయానికి సరిగ్గా 7 రోజుల తర్వాత ఎక్స్‌పైరీ అయ్యే తేదీని ఎలా సెట్ చేయాలి?
  6. Math.max() లో ఏ ఆర్గ్యుమెంట్స్ ఇవ్వకపోతే ఔట్‌పుట్ ఏమి వస్తుంది?
👉 సమాధానాలు మరియు వివరణలు చూడండి (Click to Expand)

1. సమాధానం: Math.floor(-3.1) ఫలితం -4 (ఎందుకంటే సంఖ్యా రేఖపై కిందికి చూస్తుంది). Math.trunc(-3.1) ఫలితం -3 (దశాంశాన్ని తీసివేస్తుంది).

2. సమాధానం: Math.floor(Math.random() * (20 - 10 + 1)) + 10 ➔ Math.floor(Math.random() * 11) + 10.

3. సమాధానం: జనవరి. ఎందుకంటే JavaScript లో నెలలు 0-బేస్డ్ ఇండెక్స్ (0 = Jan, 1 = Feb).

4. సమాధానం: JavaScript లో ఆబ్జెక్టులను === తో పోల్చినప్పుడు వాటి మెమరీ రిఫరెన్స్ తనిఖీ చేయబడుతుంది. రెండు వేర్వేరు ఆబ్జెక్టులు వేర్వేరు మెమరీ లొకేషన్లలో ఉంటాయి కాబట్టి false వస్తుంది. సరైన విధానం: d1.getTime() === d2.getTime().

5. సమాధానం:
const expiry = new Date();
expiry.setDate(expiry.getDate() + 7); // నేటి తారీఖుకు 7 రోజులు కలుపుతుంది

6. సమాధానం: -Infinity. ఎటువంటి సంఖ్యలు ఇవ్వకపోతే Math.max() కనీస అల్ప విలువ -Infinity ని, Math.min() గరిష్ట విలువ Infinity ని ఇస్తాయి!

📌 సారాంశం (Quick Summary):

  • Math Object: ఇది స్థిరమైన (Static) టూల్‌బాక్స్. new Math() వాడకూడదు.
  • రౌండింగ్ తేడాలు: round సమీప సంఖ్యకు, floor కిందికి, ceil పైకి, trunc దశాంశాలను కత్తిరించడానికి వాడతారు.
  • రాండమ్ ఫార్ములా: Math.floor(Math.random() * (max - min + 1)) + min.
  • Date Object: 1970 Jan 1 (Unix Epoch) నుండి సమయాన్ని మిల్లీసెకన్లలో ట్రాక్ చేస్తుంది.
  • నెలల Gotcha: getMonth() ఎల్లప్పుడూ 0 నుండి 11 వరకు మాత్రమే ఇస్తుంది (January = 0).
  • వ్యత్యాసం: తేదీల మధ్య వ్యవధి కావాలంటే getTime() మిల్లీసెకన్లను తీసుకుని 86,400,000 తో భాగించాలి.

🎉 అభినందనలు! Part 03 పూర్తయింది →

ఇంతటితో JavaScript కోర్ లాంగ్వేజ్ మరియు డేటా నిర్మాణాలు (Functions, Arrays, Objects, Strings, Math, Date) పూర్తయ్యాయి!
తర్వాతి విభాగం Part 04: DOM & Events లో మనం నేరుగా HTML వెబ్ పేజీలతో జావాస్క్రిప్ట్ ఎలా మాట్లాడుతుంది? బటన్ క్లిక్స్, టెక్స్ట్ మార్పులు, యానిమేషన్స్ ఎలా నియంత్రించాలో నేర్చుకుందాం!

18. DOM: Elements Selection & Manipulation →