getAge(dateOfBirthObject, ageDateObject)

112 views
Skip to first unread message

mg

unread,
Feb 19, 2010, 8:59:00 AM2/19/10
to Datejs - A JavaScript Date Library
I created a function to get someones age when supplied a birthdate and
the date at which you require the age. What do ye think? (I have
checked that the second Date is after the first date in the function
that calls this one).

/**
* A function which will calculate the age in years of the first Date
object, dateOfBirthObject,
* at the Date of the second Date Object, ageDateObject.
* It will use the functions available in date.js.
* @ param Date date of birth
* @ param Date date at which age needed
* @ return years age
*/
function getAge(dateOfBirthObject, ageDateObject) {

// A variable which will store the current year
var yearToday = ageDateObject.toString('yyyy');
// A variable which will be used to store the birth year
var yearBirthDate = dateOfBirthObject.toString('yyyy');
// A variable to store the amount of years between the birth year and
this year
var yearsBetween = yearToday - yearBirthDate;
// A variable which will be used to count the leap years, or more
specifically,
// how many times the 29th February has occured during the two
periods
var leapYears = 0;

// We loop through all the years from the birth year to the current
year
for (var i = yearBirthDate; i <= yearToday; i++) {
// We evaluate if the current year is a leap year
if (Date.isLeapYear(i)) {
// We evaluate if the current year is the birth year
if (i == yearBirthDate) {
// We must evaluate if the birth date occured on or after the 29th
February
// We create a date String of 29th February of the birth year
var dOBFeb29 = new String('29/02/' + yearBirthDate);
// We create a date object, will return null if the String date is
not valid
var dOBFeb29DateObject = Date.parseExact(dOBFeb29, 'dd/MM/yyyy');
// We check if the date of birth is on (0), before (-1), or after
(1) the 29th February
var dobAfter = dateOfBirthObject.compareTo(dOBFeb29DateObject);
// If date of birth is after the 29th February, we do nothing,
else we increment the variable leapYears
if (dobAfter == 1) {}
else {
leapYears++;
}
}
// We evaluate it the current year is this year
else if (i == yearToday) {
// We must evaluate if the 29th February has occured this year
// We create a date String of 29th February of the current year
var thisYearFeb29 = new String('29/02/' + yearToday);
// We create a date object, will return null if the String date is
not valid
var thisYearFeb29DateObject = Date.parseExact(thisYearFeb29, 'dd/
MM/yyyy');
// We check if todays date is on (0), before (-1), or after (1)
the 29th February
var thisYearAfter =
ageDateObject.compareTo(thisYearFeb29DateObject);
// If todays date is before the 29th February, we do nothing, else
we increment the variable leapYears
if (dobAfter == -1) {}
else {
leapYears++;
}
}
// For all other years we increment the variable leapYears
else {
leapYears++;
}
}
}

// We get the age in milliseconds and then work up to a value in
years
var miliseconds = ageDateObject - dateOfBirthObject;
var seconds = miliseconds / 1000;
var minutes = seconds / 60;
var hours = minutes / 60;
var days = hours / 24;
var decimalPart;
var yearDivisor;
var years;

// We need to set the decimal portion of the yearDivisor
if (yearsBetween == 0) {
decimalPart = 0;
}
else {
decimalPart = leapYears / yearsBetween;
}

// We add the decimal part to 365
yearDivisor = 365 + decimalPart;
// We calculate the age in years
years = days / yearDivisor;

return years;
}

yunosh

unread,
Feb 19, 2010, 9:45:11 AM2/19/10
to Datejs - A JavaScript Date Library
Wow, that's a lot of code for that purpose.

How about that (untested pseudo code):

function getAge(dateOfBirthObject, ageDateObject) {
var thisBirthday =
dateOfBirthObject.clone().setYear(ageDateObject.getYear());
return ageDateObject.getYear() - dateOfBirthObject.getYear() -
(thisBirthday.isAfter(ageDateObject) ? 0 : 1);
}

geoffrey.mcgill

unread,
Feb 19, 2010, 1:22:14 PM2/19/10
to Datejs - A JavaScript Date Library
Another option, if you happen to include the time.js file, you can use
the TimePeriod class to get an age.

Example

var age = new TimePeriod(birthDate, Date.today()).years;


Hope this helps.

Reply all
Reply to author
Forward
0 new messages