YYYYMMDD ফর্ম্যাটে জন্মের তারিখ দেওয়া বয়স গণনা করুন


285

ওয়াইওয়াইওয়াইএমএমডিডি ফর্ম্যাটের জন্ম তারিখ দেওয়া হলে আমি কীভাবে কয়েক বছর বয়স গণনা করতে পারি? এটি Date()ফাংশন ব্যবহার করে সম্ভব ?

আমি এখন যেটি ব্যবহার করছি তার চেয়ে ভাল সমাধানের সন্ধান করছি:

var dob = '19800810';
var year = Number(dob.substr(0, 4));
var month = Number(dob.substr(4, 2)) - 1;
var day = Number(dob.substr(6, 2));
var today = new Date();
var age = today.getFullYear() - year;
if (today.getMonth() < month || (today.getMonth() == month && today.getDate() < day)) {
  age--;
}
alert(age);


দয়া করে আপনার ফর্ম্যাটিংটি মনে রাখবেন, আপনি যেমন করেছিলেন তেমনটি করবেন না; কোড (010101) বাটন বা Ctrl-K ব্যবহার করে 4 টি স্পেস দিয়ে আপনার কোডটি প্রবেশ করুন।
মার্সেল করপেল

আমি করেছি তবে এটি IE9 বিটাতে কাজ করতে ব্যর্থ হয়েছে তাই আমাকে এটি হাতে হাতে করতে হয়েছিল।
ফ্রান্সিস্ক

4
আপনার আসল সমাধানটি বর্তমান উত্তরগুলির চেয়ে বয়সের গণনায় আরও ভাল। জেলিও স্যান্টোসের উত্তর মূলত একই জিনিস। অন্যান্য উত্তরগুলি অনেক শর্তে সঠিক ফলাফল দেয় এবং কম সোজা বা কার্যকরও হতে পারে।
ব্রুক অ্যাডামস

ধন্যবাদ ব্রোক। আমি আশা করছিলাম যে এটি করার চেয়ে আরও মার্জিত উপায় আছে যা কিছুটা অপরিশোধিত বলে মনে হয়।
ফ্রান্সিস্ক

4
@ ফ্রানসিস্ক, এটি অপরিশোধিত, তবে এটি Dateযদি এটি আবদ্ধ করে রাখে তবে অবজেক্টটি কী করতে পারে। লোকেরা জেএসের Dateপরিচালনার স্তন্যপান সম্পর্কে বই লিখতে পারে । ... আপনি যদি কখনও কখনও একদিনের সাথে বন্ধ থাকার সাথে বেঁচে থাকতে পারেন তবে অনুমান: আপনার AgeInYears = Math.floor ( (now_Date - DOB_Date) / 31556952000 )পক্ষে যতটা সহজ।
ব্রুক অ্যাডামস

উত্তর:


245

আমি পাঠযোগ্যতার জন্য যেতে হবে:

function _calculateAge(birthday) { // birthday is a date
    var ageDifMs = Date.now() - birthday.getTime();
    var ageDate = new Date(ageDifMs); // miliseconds from epoch
    return Math.abs(ageDate.getUTCFullYear() - 1970);
}

দাবি অস্বীকার: এটিতেও যথার্থ সমস্যা রয়েছে, সুতরাং এটিও পুরোপুরি বিশ্বাস করা যায় না। এটি কয়েক ঘন্টা, কয়েক বছর বা দিবালোক সংরক্ষণের সময় (টাইমজোনের উপর নির্ভর করে) বন্ধ হয়ে যেতে পারে।

পরিবর্তে আমি এটির জন্য একটি লাইব্রেরি ব্যবহার করার পরামর্শ দেব, যদি যথার্থতা খুব গুরুত্বপূর্ণ। এছাড়াও @Naveens post, সম্ভবত সবচেয়ে সঠিক, কারণ এটি দিনের সময় নির্ভর করে না।


বেঞ্চমার্কস: http://jsperf.com/birthday-calculation/15


3
এটি 2000-02-29 থেকে 2001-02-28 এর মতো তারিখের জন্য 0 বছর ফেরায় যখন সম্ভবত এটি 1 ফিরে আসবে
রবজি

16
@ রবজি আমি ভাবি না যে একটি সম্পূর্ণ বছর প্রযুক্তিগতভাবে 2000-02-29 থেকে 2001-02-28 এ চলে গেছে, আপনার উত্তরটিকে অবৈধ করে তুলেছে। এটি বোঝা যাবে না, 2000-02-28 থেকে 2001-02-28 এক বছর, সুতরাং 2000-02-29 থেকে 2001-02-28, অবশ্যই এক বছরেরও কম হওয়া উচিত।
আন্দ্রে সান্দে কক

3
"যথাযথ নয়" এর অর্থ আপনি বিস্তারিত ব্যাখ্যা করেন নি, আমি ভেবেছিলাম অতিরিক্ত তথ্য সহায়ক হতে পারে। আপনি সমস্যাগুলি সমাধান করা বা উত্তর মোছার বিষয়ে বিবেচনা করতে পারেন।
রবজি

1
@ রবজি আসলে আমি করেছি। আমি আমার নিজের থেকে ভাল সমাধানের দিকেও ইঙ্গিত করেছিলাম। আমার সমাধানটি ছোটখাটো নির্ভুলতা সংক্রান্ত সমস্যাগুলি সহ ফ্যাশন পড়ার সহজ সমাধানে সমস্যার সমাধান করে তবে এর উদ্দেশ্য সীমার মধ্যে।
আন্দ্রে সান্দে কক

1
সুন্দর উত্তর @ অ্যান্ড্রেসনেডহানসেন এবং খুব দ্রুত, যেহেতু আমার উত্তরটিতে উপস্থিত হিসাবে আপনার মতো পাগল বিভাগ নেই ;-) পাঠ্যতা এবং গতির জন্য +1।
ক্রিস্টোফার ডর্ফ

506

এটা চেষ্টা কর.

function getAge(dateString) {
    var today = new Date();
    var birthDate = new Date(dateString);
    var age = today.getFullYear() - birthDate.getFullYear();
    var m = today.getMonth() - birthDate.getMonth();
    if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) {
        age--;
    }
    return age;
}

আমি বিশ্বাস করি যে আপনার কোডটিতে অশুচি লাগছিল এমন একমাত্র substrঅংশ ছিল ।

ফিডল : http://jsfiddle.net/codeandcloud/n33RJ/


আপনি একটি ব্যবহারের উদাহরণ দিতে পারেন? 3 টি পৃথক যুক্তি যেমন ফাংশনটি সংশোধন না করে আমি এটি কাজ করতে পারি না যেমন: getAge (y, m, d)। উদাহরণস্বরূপ: jsbin.com/ehaqiw/1/edit
এডিট

অন্যান্য অনেকের মতো, এটিও মনে করে 2000-02-29 থেকে 2001-02-28 শূন্য বছর, যখন এটি সম্ভবত সম্ভবত 1 (2001-03-01 সাল থেকে 1 বছর 1 দিন হওয়া উচিত) হওয়া উচিত।
রবজি

3
@ রবজি: যখন চিতাবাঘেরা 'উদযাপন' ​​করে (সেই প্রশ্নের সাধারণ উত্তরটি কেবল মনে হয়: 'সত্যিকারের তারিখের নিকটতম উইকএন্ড') তাদের জন্ম-দিন পার্থক্যের ভিত্তিতে পৃথক : ভৌগলিক অঞ্চল (সরল ইংরাজী: আপনি কোথায় থাকেন) ), আইন (সেইটিকে অবমূল্যায়ন করবেন না), ধর্ম এবং ব্যক্তিগত পছন্দ (গ্রুপ-আচরণ সহ): কিছু কারণ: "আমি ফেব্রুয়ারিতে জন্মগ্রহণ করেছি", অন্যদের কারণ: "আমি ২৮ শে ফেব্রুয়ারির পরের দিন জন্মগ্রহণ করেছি" (যা সবচেয়ে বেশি যে মার্চ 1TH হয়) en.wikipedia.org/wiki/February_29 এই algo উপরে সব জন্য সঠিক যদি মার্চ 1TH leapyear ফলাফলের হয় এক চাহিদা হল
GitaarLAB

3
@ রবজি: 'প্লাস এক্স মাস (গুলি)' এর সেলপিট বছরের পর বছর ধরে মানুষের ধারণার সাথে অপ্রাসঙ্গিক। সাধারণ মানুষের ধারণাটি হল যে বয়স (ইনসলেস) -কাউন্টারে প্রতিদিন বৃদ্ধি হয় (সময়কে উপেক্ষা করে) যখন ক্যালেন্ডারে একই মাস # এবং দিন # থাকে (শুরুর তারিখের সাথে তুলনা করা হয়): সুতরাং 2000-02-28 থেকে 2001-02 -27 = 0 বছর এবং 2000-02-28 থেকে 2001-02-28 = 1 বছর। 2000-02-29 (দিন: যে 'সাধারণ জ্ঞান' leaplings পর্যন্ত বিস্তৃত পর 2001-02-28 = করার 2000-02-28) শূন্য বছর । আমার মন্তব্যটি কেবল বলেছে যে উত্তর দেওয়া যদি সর্বদা 'সঠিক' মানবিক উত্তর দেয় তবে যদি কেউ এই যুক্তিতে লিপিংয়ের জন্য প্রত্যাশিত / সম্মত হন।
গীতারল্যাব

3
@ রবজি: আমি কখনও বলিনি যে আমি বা উত্তরটি সর্বজনীনভাবে সঠিক (টিএম) ছিল। আমি প্রসঙ্গ / এখতিয়ার / মতামত ধারণা অন্তর্ভুক্ত। উভয় আমার মন্তব্য পরিষ্কারভাবে একটি বড় হাতের অন্তর্ভুক্ত যদি (ব্যতিক্রম leaplings সামলাচ্ছে প্রতি)। প্রকৃতপক্ষে, আমার প্রথম মন্তব্যে আমি যা বলতে চাইছিলাম ঠিক তা বলেছিল এবং সঠিক বা ভুল সম্পর্কিত কোনও রায়কে কখনই অন্তর্ভুক্ত করা হয়নি। বাস্তবে আমার মন্তব্যগুলি এই উত্তর থেকে কী এবং কী প্রত্যাশা করবেন না (এবং কেন) তা স্পষ্ট করে (যেমন আপনি এটি 'বিষয়গুলি হাইলাইট' বলছেন)। পিএস: 31 ফেব্রুয়ারী?!?
গীতারল্যাব

72

গুরুত্বপূর্ণ: এই উত্তরটি 100% নির্ভুল উত্তর সরবরাহ করে না, এটি তারিখের উপর নির্ভর করে প্রায় 10-20 ঘন্টা দ্বারা বন্ধ থাকে।

এর চেয়ে ভাল কোনও সমাধান নেই (যাইহোক এই উত্তরগুলিতে নয়)। - নবীন

আমি অবশ্যই বর্তমান গ্রহণযোগ্য সমাধানের চেয়ে চ্যালেঞ্জটি গ্রহণ এবং জন্মদিনের ক্যালকুলেটর তৈরির তাগিদ প্রতিরোধ করতে পারিনি। আমার সমাধানের মূল বক্তব্যটি হ'ল গণিতটি দ্রুত, তাই শাখাগুলি ব্যবহার করার পরিবর্তে এবং তারিখের মডেল জাভাস্ক্রিপ্ট একটি সমাধান গণনা করে যা আমরা অসাধারণ গণিত ব্যবহার করি

উত্তরটি এর মতো দেখাচ্ছে এবং নবীনদের তুলনায় ~ 65% দ্রুত গতিতে চালিত হয়েছে এটি অনেক কম:

function calcAge(dateString) {
  var birthday = +new Date(dateString);
  return ~~((Date.now() - birthday) / (31557600000));
}

যাদু সংখ্যা: 31557600000 24 * 3600 * 365.25 * 1000 যা এক বছরের দৈর্ঘ্য, এক বছরের দৈর্ঘ্য 365 দিন এবং 6 ঘন্টা যা 0.25 দিন is শেষ পর্যন্ত আমি ফলাফলটি চূড়ান্ত বয়স দেয় gives

এখানে মাপদণ্ড রয়েছে: http://jsperf.com/birthday-calculation

ওপির ডেটা ফর্ম্যাটটিকে সমর্থন করতে আপনি এর +new Date(dateString);
সাথে প্রতিস্থাপন করতে পারেন+new Date(d.substr(0, 4), d.substr(4, 2)-1, d.substr(6, 2));

আপনি যদি আরও ভাল সমাধান নিয়ে আসতে পারেন তবে শেয়ার করুন! :-)


এটি একটি দুর্দান্ত শীতল সমাধান। এটির সাথে আমি দেখতে পাচ্ছি কেবলমাত্র সমস্যাটি হ'ল dateStringতারিখ () নির্মাতার পক্ষে সঠিকভাবে পার্স করার পক্ষে ঠিক যুক্তিযুক্ত। উদাহরণস্বরূপ, YYYYMMDDপ্রশ্নটিতে আমি যে ফর্ম্যাটটি দিয়েছি তা গ্রহণ করা , এটি ব্যর্থ হবে।
ফ্রান্সিস্ক

22
এই উত্তরটির মধ্যে একটি বাগ রয়েছে। আপনার ঘড়িটি সকাল 12:01 এ সেট করুন। সকাল ১১:২০ এ, আপনি যদি ক্যালকাএজ ('2012-03-27') (আজকের তারিখ) সমান হওয়া সত্ত্বেও আপনি শূন্যের উত্তর পাবেন This এই বাগটি পুরো 12:00 ঘন্টার জন্য বিদ্যমান। এটি একটি বছরের মধ্যে 365.25 দিন রয়েছে এমন ভুল বক্তব্যের কারণে এটি ঘটে। এটা না. আমরা ক্যালেন্ডার বছরগুলি নিয়ে কাজ করছি, পৃথিবীর কক্ষপথের দৈর্ঘ্য নয় (যা আরও সঠিকভাবে 365.256363 দিন রয়েছে)। লিপ বছর বাদে 366 দিন বাদে এক বছরে 365 দিন থাকে। তদ্ব্যতীত, এই জাতীয় কিছুতে অভিনয় অর্থহীন। রক্ষণাবেক্ষণ অনেক বেশি গুরুত্বপূর্ণ।
এরিক ব্র্যান্ডেল

1
ক্রিস্টোফার আপনার সমাধানের জন্য ধন্যবাদ। আমি কি নতুনকে কেবল নতুনের সাথে তুলনা করে, এবং দুটি টিল্ডের (~) এর বিনিময়ে জিজ্ঞাসা করতে পারি?
ফ্র্যাঙ্ক জেনসেন

1
@ ফ্র্যাঙ্ক জেনসেন হাই ফ্র্যাঙ্ক, আমিও কৌতূহলী ছিলাম এবং এই উত্তরটি পেয়েছিলাম: ডাবল টিলডে ভাসাটি পূর্ণসংখ্যক শুভেচ্ছায় রূপান্তরিত করে
স্টানো

1
@ ফ্র্যাঙ্ক জেনসেন মূলত টিলড নম্বরটি (বাইনারি মান) উল্টো করে ফ্লোটকে পূর্ণসংখ্যায় (তলিত) রূপান্তর করে, সুতরাং দুটি টিল্ড আপনাকে বৃত্তাকার নম্বর দেয়। + নতুন তারিখের সামনের () অবজেক্টটিকে তারিখের অবজেক্টের পূর্ণ উপাত্ততে রূপান্তরিত করে, এটি উদাহরণের জন্য সংখ্যাগুলির স্ট্রিং সহ ব্যবহার করা যেতে পারে + '21 '=== 21
ক্রিস্টোফার ডরফ

55

মুহুর্তের সাথে:

/* The difference, in years, between NOW and 2012-05-07 */
moment().diff(moment('20120507', 'YYYYMMDD'), 'years')

2
@ রিকার্ডোপন্টুয়াল এর জন্য মুহুর্তের প্রয়োজন, তাই সেরা উত্তর হতে পারে না।
itzmukeshy7

13
@ itzmukeshy7 প্রকৃতপক্ষে, উত্তরের উত্তম হওয়ার জন্য এর জন্য কমপক্ষে jQuery হওয়া দরকার;)
থোমাক্স

@thomaux এটি সম্পূর্ণরূপে উন্নয়নের পরিবেশের উপর নির্ভর করে!
itzmukeshy7

@ itzmukeshy7 শিথিল করুন, এটি একটি রসিকতা;) দেখুন: meta.stackexchange.com/a/19492/173875
থোমাক্স

2
@ থোমাক্স আমি জানতাম যে এটি একটি রসিকতা;)
itzmukeshy7

38

ES6 ব্যবহার করে ওয়ান-লাইনার সলিউশনটি পরিষ্কার করুন:

const getAge = birthDate => Math.floor((new Date() - new Date(birthDate).getTime()) / 3.15576e+10)

// today is 2018-06-13
getAge('1994-06-14') // 23
getAge('1994-06-13') // 24

আমি এক বছর ৩5৫.২৫ দিন (লিপ বছরের কারণে 0.25) ব্যবহার করছি যা যথাক্রমে 3.15576e + 10 মিলি সেকেন্ড (365.25 * 24 * 60 * 60 * 1000)।


1
খুব সুন্দর ঝরঝরে - আপনি কি 3.15576e + 10 অর্থ বোঝাতে পারেন?
একাকী

1
হ্যাঁ, ফাংশনের আগে নিম্নলিখিত লাইনটি যুক্ত করা ভাল হবে:const yearInMs = 3.15576e+10 // Using a year of 365.25 days (because leap years)
লুকাস জ্যানন

12

কিছুক্ষণ আগে আমি সেই উদ্দেশ্য নিয়ে একটি ফাংশন করেছি:

function getAge(birthDate) {
  var now = new Date();

  function isLeap(year) {
    return year % 4 == 0 && (year % 100 != 0 || year % 400 == 0);
  }

  // days since the birthdate    
  var days = Math.floor((now.getTime() - birthDate.getTime())/1000/60/60/24);
  var age = 0;
  // iterate the years
  for (var y = birthDate.getFullYear(); y <= now.getFullYear(); y++){
    var daysInYear = isLeap(y) ? 366 : 365;
    if (days >= daysInYear){
      days -= daysInYear;
      age++;
      // increment the age only if there are available enough days for the year.
    }
  }
  return age;
}

এটি একটি তারিখ অবজেক্টটিকে ইনপুট হিসাবে গ্রহণ করে, সুতরাং আপনার 'YYYYMMDD'ফর্ম্যাট করা তারিখের স্ট্রিংটি পার্স করতে হবে :

var birthDateStr = '19840831',
    parts = birthDateStr.match(/(\d{4})(\d{2})(\d{2})/),
    dateObj = new Date(parts[1], parts[2]-1, parts[3]); // months 0-based!

getAge(dateObj); // 26

হ্যাঁ, আমি লিপ বছর মিস করেছি missed ধন্যবাদ.
ফ্রান্সিস্ক

1
এটি নির্বাচনের তারিখ সংমিশ্রণের জন্য অবৈধ মান দেয়! উদাহরণস্বরূপ, যদি birthDateহয় জানুয়ারী 5th, 1980 এবং বর্তমান তারিখ জানুয়ারী 4th, 2005 , তারপর ফাংশন ভুল রিপোর্ট হবে age25 যেমন ... সঠিক মান 24. হচ্ছে
ব্রক অ্যাডামস

@ ব্রকএডামস এই মুহুর্তে আমার এই সমস্যা হচ্ছে। ধন্যবাদ।
জ্যাক এইচ

@ ভিশনচিহ্ন, কারণ এটি প্রান্তের শর্তগুলি সঠিকভাবে পরিচালনা করে না। বিশ্বাস করুন বা না করুন, প্রশ্ন থেকে প্রাপ্ত কোডটি সর্বোত্তম পন্থা - যদিও মনে হচ্ছে পরবর্তী উত্তরগুলির মধ্যে যে কোনও একটি এটি আরও উপযুক্তভাবে পুনরায় প্যাকেজ করেছে।
ব্রুক অ্যাডামস

সিএমএস হাই :-) আমি এই প্রশ্নটি লিখেছি ( স্ট্যাকওভারফ্লো / প্রশ্ন / ১13535৩৯৮১/২ ) এবং আমাকে জানানো হয়েছিল যে আমি যদি 100% সঠিক উত্তর চাই তবে আমার প্রতি বছর পরীক্ষা করা উচিত - যদি এটি একটি লিপ বছর হয়, এবং তারপরে শেষটি গণনা করুন ভগ্নাংশ। (গুফার উত্তর দেখুন) আপনার ফাংশন (এটির একটি অংশ) এটি করে । তবে বয়সটি 100% নিখুঁতভাবে গণনা করতে আমি কীভাবে এটি ব্যবহার করতে পারি? ডিওবি খুব কমই 1/1 / yyyy এ শুরু হয় ..... সুতরাং আমি কীভাবে সঠিক বয়স গণনা করতে আপনার ফানক ব্যবহার করতে পারি?
রই নমির

10

এখানে আমার সমাধানটি রয়েছে, কেবল একটি পার্সেবলের তারিখে পাস করুন:

function getAge(birth) {
  ageMS = Date.parse(Date()) - Date.parse(birth);
  age = new Date();
  age.setTime(ageMS);
  ageYear = age.getFullYear() - 1970;

  return ageYear;

  // ageMonth = age.getMonth(); // Accurate calculation of the month part of the age
  // ageDay = age.getDate();    // Approximate calculation of the day part of the age
}

7

বিকল্প সমাধান, কেন না:

function calculateAgeInYears (date) {
    var now = new Date();
    var current_year = now.getFullYear();
    var year_diff = current_year - date.getFullYear();
    var birthday_this_year = new Date(current_year, date.getMonth(), date.getDate());
    var has_had_birthday_this_year = (now >= birthday_this_year);

    return has_had_birthday_this_year
        ? year_diff
        : year_diff - 1;
}

5
function age()
{
    var birthdate = $j('#birthDate').val(); // in   "mm/dd/yyyy" format
    var senddate = $j('#expireDate').val(); // in   "mm/dd/yyyy" format
    var x = birthdate.split("/");    
    var y = senddate.split("/");
    var bdays = x[1];
    var bmonths = x[0];
    var byear = x[2];
    //alert(bdays);
    var sdays = y[1];
    var smonths = y[0];
    var syear = y[2];
    //alert(sdays);

    if(sdays < bdays)
    {
        sdays = parseInt(sdays) + 30;
        smonths = parseInt(smonths) - 1;
        //alert(sdays);
        var fdays = sdays - bdays;
        //alert(fdays);
    }
    else{
        var fdays = sdays - bdays;
    }

    if(smonths < bmonths)
    {
        smonths = parseInt(smonths) + 12;
        syear = syear - 1;
        var fmonths = smonths - bmonths;
    }
    else
    {
        var fmonths = smonths - bmonths;
    }

    var fyear = syear - byear;
    document.getElementById('patientAge').value = fyear+' years '+fmonths+' months '+fdays+' days';
}

বছর কয়েক মাস এবং দিনগুলিতে বয়স খুঁজে পাওয়া সহজ
সুমিত কুমার গুপ্ত

5

জন্মদিন ইতিমধ্যে পাস হয়েছে কিনা তা পরীক্ষা করার জন্য, আমি একটি সহায়ক ফাংশন সংজ্ঞায়িত করি Date.prototype.getDoY, যা কার্যকরভাবে বছরের দিনটির নম্বর দেয়। বাকিগুলি বেশ স্ব-ব্যাখ্যামূলক।

Date.prototype.getDoY = function() {
    var onejan = new Date(this.getFullYear(), 0, 1);
    return Math.floor(((this - onejan) / 86400000) + 1);
};

function getAge(birthDate) {
    function isLeap(year) {
        return year % 4 == 0 && (year % 100 != 0 || year % 400 == 0);
    }

    var now = new Date(),
        age = now.getFullYear() - birthDate.getFullYear(),
        doyNow = now.getDoY(),
        doyBirth = birthDate.getDoY();

    // normalize day-of-year in leap years
    if (isLeap(now.getFullYear()) && doyNow > 58 && doyBirth > 59)
        doyNow--;

    if (isLeap(birthDate.getFullYear()) && doyNow > 58 && doyBirth > 59)
        doyBirth--;

    if (doyNow <= doyBirth)
        age--;  // birthday not yet passed this year, so -1

    return age;
};

var myBirth = new Date(2001, 6, 4);
console.log(getAge(myBirth));

এই 28 শে ফেব্রুয়ারির পরে জন্মদিনের জন্য লিপ-বছরে সঠিক ফলাফল দেয়। এটি 1 দিন দ্বারা এই ধরনের লোকদের বয়সের হয়। ইজি: ডোবি = 2001/07/04 এর জন্য , এই ফাংশনটি 2007/07/03 এ 7 বছর ফিরে আসবে
ব্রক অ্যাডামস

@ ব্রোক: ধন্যবাদ যদি আমার ভুল না হয় তবে আমি এই ভ্রান্ত আচরণটি সংশোধন করেছি।
মার্সেল করপেল

হ্যাঁ, আমি মনে করি আপনি থাকতে পারেন (কঠোরভাবে পরীক্ষা করা হয়নি, কেবল বিশ্লেষণ করেছেন)। তবে লক্ষ্য করুন যে নতুন সমাধানটি কোনও ওপির সমাধানের চেয়ে সহজ এবং মার্জিত নয় (এটি গণনা করছেন না যে এটি একটি ফাংশনে সঠিকভাবে আবদ্ধ হয়েছে)। ... ওপির সমাধানটি বোঝা সহজ (এইভাবে নিরীক্ষণ, পরীক্ষা বা পরিবর্তন করা)। কখনও কখনও সহজ এবং সোজাও সেরা, আইএমও।
ব্রক অ্যাডামস

@ ব্রোক: আমি পুরোপুরি একমত: এই ফাংশনটি কী করে তা সম্পর্কে আমাকে ভাবতে হবে এবং এটি কখনই ভাল জিনিস নয়।
মার্সেল করপেল

"যদি (doyNow <doyBirth)" হওয়া উচিত "যদি (doyNow <= doyBirth)"? আমার সমস্ত পরীক্ষায়, দিনটি একের পর এক বন্ধ হয়ে যায় এবং এটিই এটি স্থির করে দেয়।
টেড কুল্প

5

আমি মনে করি যে এটি সহজভাবে হতে পারে:

function age(dateString){
    let birth = new Date(dateString);
    let now = new Date();
    let beforeBirth = ((() => {birth.setDate(now.getDate());birth.setMonth(now.getMonth()); return birth.getTime()})() < birth.getTime()) ? 0 : 1;
    return now.getFullYear() - birth.getFullYear() - beforeBirth;
}

age('09/20/1981');
//35

একটি টাইমস্ট্যাম্পের সাথেও কাজ করে

age(403501000000)
//34

এই কোডটি সারা বছর একই ব্যক্তির গণনা করবে। আপনার উদাহরণস্বরূপ, আজ যদি '09 / 19/2018 'হয় তবে কোডটি 37 দিত, তবে বয়স (জন্মদিনের আগের দিন) 36 হবে ...
স্টিভ গুসসেন

4

আমাকে কেবল নিজের জন্য এই ফাংশনটি লিখতে হয়েছিল - গৃহীত উত্তরটি মোটামুটি ভাল তবে আইএমও কিছু ক্লিনআপ ব্যবহার করতে পারে। এটি ডাবের জন্য একটি ইউনিক্স টাইমস্ট্যাম্প নেয় কারণ এটি আমার প্রয়োজন ছিল তবে স্ট্রিংটি ব্যবহারের জন্য দ্রুত রূপান্তর করা যেতে পারে:

var getAge = function(dob) {
    var measureDays = function(dateObj) {
            return 31*dateObj.getMonth()+dateObj.getDate();
        },
        d = new Date(dob*1000),
        now = new Date();

    return now.getFullYear() - d.getFullYear() - (measureDays(now) < measureDays(d));
}

লক্ষ্য করুন আমি আমার পরিমাপকাজ কার্যক্রমে 31 এর ফ্ল্যাট মান ব্যবহার করেছি। সমস্ত গণনা যে বিষয়টি যত্নশীল তা হ'ল "বছরের-দিন" টাইমস্ট্যাম্পের একঘেয়েভাবে বর্ধমান পরিমাপ।

যদি জাভাস্ক্রিপ্ট টাইমস্ট্যাম্প বা স্ট্রিং ব্যবহার করে থাকেন তবে আপনি অবশ্যই 1000 এর ফ্যাক্টরটি সরাতে চাইবেন।


n অপরিবর্তিত আমার মনে হয় আপনি now.getFullYear () অর্থ
ল্যারি যুদ্ধ

4
function getAge(dateString) {

    var dates = dateString.split("-");
    var d = new Date();

    var userday = dates[0];
    var usermonth = dates[1];
    var useryear = dates[2];

    var curday = d.getDate();
    var curmonth = d.getMonth()+1;
    var curyear = d.getFullYear();

    var age = curyear - useryear;

    if((curmonth < usermonth) || ( (curmonth == usermonth) && curday < userday   )){

        age--;

    }

    return age;
}

যখন ইউরোপীয় তারিখ প্রবেশ করেছে তখন বয়সটি পেতে:

getAge('16-03-1989')

স্ট্যাকওভারফ্লো . com/a/13367162/1055987 ভাল ক্যাচে আপনার পরামর্শের জন্য ধন্যবাদ ।
জেএফকে

3

Moment.js এর সাথে আরও একটি সম্ভাব্য সমাধান :

var moment = require('moment');
var startDate = new Date();
var endDate = new Date();
endDate.setDate(endDate.getFullYear() + 5); // Add 5 years to second date
console.log(moment.duration(endDate - startDate).years()); // This should returns 5

2

আমি এর আগে প্রদর্শিত উদাহরণগুলি চেক করেছি এবং তারা সব ক্ষেত্রেই কাজ করেনি এবং এর কারণে আমি আমার নিজের একটি স্ক্রিপ্ট তৈরি করেছি। আমি এটি পরীক্ষা করেছি এবং এটি পুরোপুরি কার্যকর হয়।

function getAge(birth) {
   var today = new Date();
   var curr_date = today.getDate();
   var curr_month = today.getMonth() + 1;
   var curr_year = today.getFullYear();

   var pieces = birth.split('/');
   var birth_date = pieces[0];
   var birth_month = pieces[1];
   var birth_year = pieces[2];

   if (curr_month == birth_month && curr_date >= birth_date) return parseInt(curr_year-birth_year);
   if (curr_month == birth_month && curr_date < birth_date) return parseInt(curr_year-birth_year-1);
   if (curr_month > birth_month) return parseInt(curr_year-birth_year);
   if (curr_month < birth_month) return parseInt(curr_year-birth_year-1);
}

var age = getAge('18/01/2011');
alert(age);

2000-02-29 থেকে 2001-02-28 এক বছর হওয়া উচিত? যদি তা হয় তবে উপরেরটি নিখুঁত নয়। :-)
রবজি

2

এটি আমার জন্য সবচেয়ে মার্জিত উপায়:

const getAge = (birthDateString) => {
  const today = new Date();
  const birthDate = new Date(birthDateString);

  const yearsDifference = today.getFullYear() - birthDate.getFullYear();

  if (
    today.getMonth() < birthDate.getMonth() ||
    (today.getMonth() === birthDate.getMonth() && today.getDate() < birthDate.getDate())
  ) {
    return yearsDifference - 1;
  }

  return yearsDifference;
};

console.log(getAge('2018-03-12'));


1

জাভাস্ক্রিপ্ট সহ জন্ম তারিখ থেকে বয়স (বছর, মাস এবং দিন) পান

ফাংশন ক্যালকুলার এড (বছর, মাস এবং দিন)

function calcularEdad(fecha) {
        // Si la fecha es correcta, calculamos la edad

        if (typeof fecha != "string" && fecha && esNumero(fecha.getTime())) {
            fecha = formatDate(fecha, "yyyy-MM-dd");
        }

        var values = fecha.split("-");
        var dia = values[2];
        var mes = values[1];
        var ano = values[0];

        // cogemos los valores actuales
        var fecha_hoy = new Date();
        var ahora_ano = fecha_hoy.getYear();
        var ahora_mes = fecha_hoy.getMonth() + 1;
        var ahora_dia = fecha_hoy.getDate();

        // realizamos el calculo
        var edad = (ahora_ano + 1900) - ano;
        if (ahora_mes < mes) {
            edad--;
        }
        if ((mes == ahora_mes) && (ahora_dia < dia)) {
            edad--;
        }
        if (edad > 1900) {
            edad -= 1900;
        }

        // calculamos los meses
        var meses = 0;

        if (ahora_mes > mes && dia > ahora_dia)
            meses = ahora_mes - mes - 1;
        else if (ahora_mes > mes)
            meses = ahora_mes - mes
        if (ahora_mes < mes && dia < ahora_dia)
            meses = 12 - (mes - ahora_mes);
        else if (ahora_mes < mes)
            meses = 12 - (mes - ahora_mes + 1);
        if (ahora_mes == mes && dia > ahora_dia)
            meses = 11;

        // calculamos los dias
        var dias = 0;
        if (ahora_dia > dia)
            dias = ahora_dia - dia;
        if (ahora_dia < dia) {
            ultimoDiaMes = new Date(ahora_ano, ahora_mes - 1, 0);
            dias = ultimoDiaMes.getDate() - (dia - ahora_dia);
        }

        return edad + " años, " + meses + " meses y " + dias + " días";
    }

ফাংশন এসনুমেরো

function esNumero(strNumber) {
    if (strNumber == null) return false;
    if (strNumber == undefined) return false;
    if (typeof strNumber === "number" && !isNaN(strNumber)) return true;
    if (strNumber == "") return false;
    if (strNumber === "") return false;
    var psInt, psFloat;
    psInt = parseInt(strNumber);
    psFloat = parseFloat(strNumber);
    return !isNaN(strNumber) && !isNaN(psFloat);
}

1

ছেলেরা আমার জন্য নিখুঁত কাজ করে।

getAge(birthday) {
    const millis = Date.now() - Date.parse(birthday);
    return new Date(millis).getFullYear() - 1970;
}

0

আমি জানি এটি একটি খুব পুরানো থ্রেড তবে আমি এই বাস্তবায়নটি রাখতে চেয়েছিলাম যা আমি বিশ্বাস করি যে বয়সটি আমি বিশ্বাস করি তার চেয়ে অনেক বেশি সঠিক finding

var getAge = function(year,month,date){
    var today = new Date();
    var dob = new Date();
    dob.setFullYear(year);
    dob.setMonth(month-1);
    dob.setDate(date);
    var timeDiff = today.valueOf() - dob.valueOf();
    var milliInDay = 24*60*60*1000;
    var noOfDays = timeDiff / milliInDay;
    var daysInYear = 365.242;
    return  ( noOfDays / daysInYear ) ;
}

অবশ্যই আপনি প্যারামিটারগুলি পাওয়ার অন্যান্য ফর্ম্যাটের সাথে মানিয়ে নিতে পারেন apt আশা করি এটি আরও ভাল সমাধান অনুসন্ধানে কাউকে সহায়তা করবে।


0

আমি গণিতের পরিবর্তে যুক্তি ব্যবহার করে এই পদ্ধতির ব্যবহার করেছি। এটি সুনির্দিষ্ট এবং দ্রুত প্যারামিটারগুলি ব্যক্তির জন্মদিনের বছর, মাস এবং দিন। এটি ব্যক্তির বয়স পূর্ণসংখ্যার হিসাবে প্রত্যাবর্তন করে।

function calculateAge(year, month, day) {
        var currentDate = new Date();
        var currentYear = currentDate.getFullYear();
        var currentMonth = currentDate.getUTCMonth() + 1;
        var currentDay = currentDate.getUTCDate();
        // You need to treat the cases where the year, month or day hasn't arrived yet.
        var age = currentYear - year;
        if (currentMonth > month) {
            return age;
        } else {
            if (currentDay >= day) {
                return age;
            } else {
                age--;
                return age;
            }
        }
    }

ওপি হিসাবে ইনপুট জন্য স্ট্রিং বা তারিখ অবজেক্ট
নাজিম

0

নবীন এবং আসল ওপি'র পোস্টগুলি গ্রহণ করে আমি পুনরায় ব্যবহারযোগ্য পদ্ধতি স্টাব দিয়ে শেষ করেছি যা উভয় স্ট্রিং এবং / অথবা জেএস তারিখের অবজেক্ট গ্রহণ করে।

আমি এর নাম রেখেছি gregorianAge()কারণ এই গণনাটি গ্রেগরিয়ান ক্যালেন্ডার ব্যবহার করে ঠিক কীভাবে বয়সকে বোঝায় তা দেয়। অর্থাত্ মাস এবং দিন জন্ম বছরের মাস এবং দিনের পূর্বে হলে শেষ বছর গণনা করা হচ্ছে না।

/**
 * Calculates human age in years given a birth day. Optionally ageAtDate
 * can be provided to calculate age at a specific date
 *
 * @param string|Date Object birthDate
 * @param string|Date Object ageAtDate optional
 * @returns integer Age between birthday and a given date or today
 */
function gregorianAge(birthDate, ageAtDate) {
  // convert birthDate to date object if already not
  if (Object.prototype.toString.call(birthDate) !== '[object Date]')
    birthDate = new Date(birthDate);

  // use today's date if ageAtDate is not provided
  if (typeof ageAtDate == "undefined")
    ageAtDate = new Date();

  // convert ageAtDate to date object if already not
  else if (Object.prototype.toString.call(ageAtDate) !== '[object Date]')
    ageAtDate = new Date(ageAtDate);

  // if conversion to date object fails return null
  if (ageAtDate == null || birthDate == null)
    return null;


  var _m = ageAtDate.getMonth() - birthDate.getMonth();

  // answer: ageAt year minus birth year less one (1) if month and day of
  // ageAt year is before month and day of birth year
  return (ageAtDate.getFullYear()) - birthDate.getFullYear() 
  - ((_m < 0 || (_m === 0 && ageAtDate.getDate() < birthDate.getDate())) ? 1 : 0)
}

// Below is for the attached snippet

function showAge() {
  $('#age').text(gregorianAge($('#dob').val()))
}

$(function() {
  $(".datepicker").datepicker();
  showAge();
});
<link rel="stylesheet" href="//code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css">
<script src="//code.jquery.com/jquery-1.10.2.js"></script>
<script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>

DOB:
<input name="dob" value="12/31/1970" id="dob" class="datepicker" onChange="showAge()" /> AGE: <span id="age"><span>


0

আরও দুটি বিকল্প:

// Int Age to Date as string YYY-mm-dd
function age_to_date(age)
{
    try {
        var d = new Date();
        var new_d = '';
        d.setFullYear(d.getFullYear() - Math.abs(age));
        new_d = d.getFullYear() + '-' + d.getMonth() + '-' + d.getDate();

        return new_d;
    } catch(err) {
        console.log(err.message);
    }
}
// Date string (YYY-mm-dd) to Int age (years old)
function date_to_age(date)
{
    try {
        var today = new Date();
        var d = new Date(date);

        var year = today.getFullYear() - d.getFullYear();
        var month = today.getMonth() - d.getMonth();
        var day = today.getDate() - d.getDate();
        var carry = 0;

        if (year < 0)
            return 0;
        if (month <= 0 && day <= 0)
            carry -= 1;

        var age = parseInt(year);
        age += carry;

        return Math.abs(age);
    } catch(err) {
        console.log(err.message);
    }
}

0

আমি আগের উত্তরটিতে কিছু আপডেট করেছি।

var calculateAge = function(dob) {
    var days = function(date) {
            return 31*date.getMonth() + date.getDate();
        },
        d = new Date(dob*1000),
        now = new Date();

    return now.getFullYear() - d.getFullYear() - ( measureDays(now) < measureDays(d));
}

আমি আশা করি এটি সাহায্য করে: ডি


0

এখানে বয়স গণনা করার একটি সহজ উপায়:

//dob date dd/mm/yy 
var d = 01/01/1990


//today
//date today string format 
var today = new Date(); // i.e wed 04 may 2016 15:12:09 GMT
//todays year
var todayYear = today.getFullYear();
// today month
var todayMonth = today.getMonth();
//today date
var todayDate = today.getDate();

//dob
//dob parsed as date format   
var dob = new Date(d);
// dob year
var dobYear = dob.getFullYear();
// dob month
var dobMonth = dob.getMonth();
//dob date
var dobDate = dob.getDate();

var yearsDiff = todayYear - dobYear ;
var age;

if ( todayMonth < dobMonth ) 
 { 
  age = yearsDiff - 1; 
 }
else if ( todayMonth > dobMonth ) 
 {
  age = yearsDiff ; 
 }

else //if today month = dob month
 { if ( todayDate < dobDate ) 
  {
   age = yearsDiff - 1;
  }
    else 
    {
     age = yearsDiff;
    }
 }

0
var now = DateTime.Now;
var age = DateTime.Now.Year - dob.Year;
if (now.Month < dob.Month || now.Month == dob.Month && now.Day < dob.Day) age--;

এটি এখন এবং জন্ম বছরের মধ্যে একটি সাধারণ বছরের পার্থক্য করে। তারপরে এটি এক বছর বিয়োগ করে যদি আজ জন্মদিনের তুলনায় বছরের আগে হয় (এটির জন্য ভাবেন, আপনার জন্মদিনে আপনার জন্মদিনে বেড়ে যায়)
স্টিভ গুসসেনস

0

আপনি এটি আপনার আকারে বয়সের সীমাবদ্ধতার জন্য ব্যবহার করতে পারেন -

function dobvalidator(birthDateString){
    strs = birthDateString.split("-");
    var dd = strs[0];
    var mm = strs[1];
    var yy = strs[2];

    var d = new Date();
    var ds = d.getDate();
    var ms = d.getMonth();
    var ys = d.getFullYear();
    var accepted_age = 18;

    var days = ((accepted_age * 12) * 30) + (ms * 30) + ds;
    var age = (((ys - yy) * 12) * 30) + ((12 - mm) * 30) + parseInt(30 - dd);

    if((days - age) <= '0'){
        console.log((days - age));
        alert('You are at-least ' + accepted_age);
    }else{
        console.log((days - age));
        alert('You are not at-least ' + accepted_age);
    }
}

0

আমি কিছুটা দেরি করে ফেলেছি তবে জন্মের তারিখ গণনা করার পক্ষে এটি সবচেয়ে সহজ উপায়।

$(document).ready(init);

function init()
{
  writeYears("myage", 0, Age());
  $(".captcha").click(function()
  {
    reloadCaptcha();
  });

}

function Age()
{
    var birthday = new Date(1997, 02, 01),  //Year, month, day.
        today = new Date(),
        one_year = 1000*60*60*24*365;
    return Math.floor( (today.getTime() - birthday.getTime() ) / one_year);
}

function writeYears(id, current, maximum)
{
  document.getElementById(id).innerHTML = current;

  if (current < maximum)
  {
    setTimeout( function() { writeYears(id, ++current, maximum); }, Math.sin( current/maximum ) * 200 );
    }
}

এইচটিএমএল ট্যাগ:

<span id="myage"></span>

আশা করি এটি সাহায্য করবে।


-1

এখানে আমি আসতে পারি সবচেয়ে সহজ, সবচেয়ে সঠিক সমাধান:

Date.prototype.getAge = function (date) {
    if (!date) date = new Date();
    return ~~((date.getFullYear() + date.getMonth() / 100
    + date.getDate() / 10000) - (this.getFullYear() + 
    this.getMonth() / 100 + this.getDate() / 10000));
}

এবং এখানে একটি নমুনা যা 29 ফেব্রুয়ারী -> 28 ফেব্রুয়ারি বছরে বিবেচনা করবে।

Date.prototype.getAge = function (date) {
    if (!date) date = new Date();
    var feb = (date.getMonth() == 1 || this.getMonth() == 1);
    return ~~((date.getFullYear() + date.getMonth() / 100 + 
        (feb && date.getDate() == 29 ? 28 : date.getDate())
        / 10000) - (this.getFullYear() + this.getMonth() / 100 + 
        (feb && this.getDate() == 29 ? 28 : this.getDate()) 
        / 10000));
}

এটি এমনকি নেতিবাচক বয়স সঙ্গে কাজ করে!


অন্য সকলের মতো এটি 2000-02-29 থেকে 2001-02-28 শূন্য বছর বলে মনে করে।
রবজি

লিপ ইয়ার এজ কেস সাজাতে আমি আমার উত্তর আপডেট করেছি। ধন্যবাদ @ রবজি
উইজুলাস 22'14

-1

তবুও আরেকটি সমাধান:

/**
 * Calculate age by birth date.
 *
 * @param int birthYear Year as YYYY.
 * @param int birthMonth Month as number from 1 to 12.
 * @param int birthDay Day as number from 1 to 31.
 * @return int
 */
function getAge(birthYear, birthMonth, birthDay) {
  var today = new Date();
  var birthDate = new Date(birthYear, birthMonth-1, birthDay);
  var age = today.getFullYear() - birthDate.getFullYear();
  var m = today.getMonth() - birthDate.getMonth();
  if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) {
    age--;
  }
  return age;
}

-1

সঙ্গে momentjs "fromNow" পদ্ধতি, এই ফরম্যাট তারিখ, অর্থাত সঙ্গে কাজ করার অনুমতি দেয়: 03/15/1968

var dob = document.getElementByID("dob"); var age = moment(dob.value).fromNow(true).replace(" years", "");

//fromNow(true) => suffix "ago" is not displayed //but we still have to get rid of "years";

প্রোটোটাইপ সংস্করণ হিসাবে

String.prototype.getAge = function() {
return moment(this.valueOf()).fromNow(true).replace(" years", "");

}

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.