Home Articles FAQs XREF Games Software Instant Books BBS About FOLDOC RFCs Feedback Sitemap
irt.Org
#

Q29 How can I calculate someone's age in years, months and days?

You are here: irt.org | FAQ | JavaScript | Date | Q29 [ previous next ]

<script language="JavaScript"><!--
function getAge(dateString,dateType) {
/*
   function getAge
   parameters: dateString dateType
   returns: boolean

   dateString is a date passed as a string in the following
   formats:

   type 1 : 19970529
   type 2 : 970529
   type 3 : 29/05/1997
   type 4 : 29/05/97

   dateType is a numeric integer from 1 to 4, representing
   the type of dateString passed, as defined above.

   Returns string containing the age in years, months and days
   in the format yyy years mm months dd days.
   Returns empty string if dateType is not one of the expected
   values.
*/

    var now = new Date();
    var today = new Date(now.getYear(),now.getMonth(),now.getDate());

    var yearNow = now.getYear();
    var monthNow = now.getMonth();
    var dateNow = now.getDate();

    if (dateType == 1)
        var dob = new Date(dateString.substring(0,4),
                            dateString.substring(4,6)-1,
                            dateString.substring(6,8));
    else if (dateType == 2)
        var dob = new Date(dateString.substring(0,2),
                            dateString.substring(2,4)-1,
                            dateString.substring(4,6));
    else if (dateType == 3)
        var dob = new Date(dateString.substring(6,10),
                            dateString.substring(3,5)-1,
                            dateString.substring(0,2));
    else if (dateType == 4)
        var dob = new Date(dateString.substring(6,8),
                            dateString.substring(3,5)-1,
                            dateString.substring(0,2));
    else
        return '';

    var yearDob = dob.getYear();
    var monthDob = dob.getMonth();
    var dateDob = dob.getDate();

    yearAge = yearNow - yearDob;

    if (monthNow >= monthDob)
        var monthAge = monthNow - monthDob;
    else {
        yearAge--;
        var monthAge = 12 + monthNow -monthDob;
    }

    if (dateNow >= dateDob)
        var dateAge = dateNow - dateDob;
    else {
        monthAge--;
        var dateAge = 31 + dateNow - dateDob;

        if (monthAge < 0) {
            monthAge = 11;
            yearAge--;
        }
    }

    return yearAge + ' years ' + monthAge + ' months ' + dateAge + ' days';
}

document.write(getAge("19650104",1)+'<BR>');

document.write(getAge("650104",2)+'<BR>');

document.write(getAge("04/01/1965",3)+'<BR>');

document.write(getAge("04/01/65",4)+'<BR>');
//--></script>

Many thanks to Stig Ã…hlberg for recommending changes to improve the reliability of the answer.

The following was submitted by Dean Maynard

The following code returns the age in years. You provide the birthdate. The code is a bit simpler and takes into account that some versions of netscape need to have 1900 added to the year.

If you were born on March 24, 1952, here's an example of how you'd call the function:

var AgeInYears = Age(3,24,1952)

That's it! Please note that the year must be passed as 4 digits - not 2!

<script language="JavaScript" type="text/javascript"><!--
function Age(monthDob,dayDob,yearDob) {
  var now = new Date();
  var yearNow = now.getYear();
  var monthNow = now.getMonth() + 1;
  var dayNow = now.getDate();

  var today = new Date(yearNow,monthNow,dayNow);

  if (yearNow < 100) {
    yearNow=yearNow+1900;
  }

  yearAge = yearNow - yearDob;
	
  if (monthNow <= monthDob) {
    if (monthNow < monthDob) {
      yearAge--;		
    } else {
      if (dayNow < dayDob) {
        yearAge--;
      }
    }
  }
  return yearAge
}
//--></script>

©2018 Martin Webb