DZone Snippets is a public source code repository. Easily build up your personal collection of code snippets, categorize them with tags / keywords, and share them with the world
How Old
Javascript function to determine how old someone is.
// ---------------------------------------------------------------------------|
// qryHowOld |
// Description: How old someone is in the format: |
// XXX Years XX Months X Weeks X Days |
// Birth Date could be specified like Date.UTC(2002,8,16,17,42,0) |
// |
// Arguments: |
// varAsOfDate: as of date |
// varBirthDate: birth date |
// |
function qryHowOld(varAsOfDate, varBirthDate)
{
var dtAsOfDate;
var dtBirth;
var dtAnniversary;
var intSpan;
var intYears;
var intMonths;
var intWeeks;
var intDays;
var intHours;
var intMinutes;
var intSeconds;
var strHowOld;
// get born date
dtBirth = new Date(varBirthDate);
// get as of date
dtAsOfDate = new Date(varAsOfDate);
// if as of date is on or after born date
if ( dtAsOfDate >= dtBirth )
{
// get time span between as of time and birth time
intSpan = ( dtAsOfDate.getUTCHours() * 3600000 +
dtAsOfDate.getUTCMinutes() * 60000 +
dtAsOfDate.getUTCSeconds() * 1000 ) -
( dtBirth.getUTCHours() * 3600000 +
dtBirth.getUTCMinutes() * 60000 +
dtBirth.getUTCSeconds() * 1000 )
// start at as of date and look backwards for anniversary
// if as of day (date) is after birth day (date) or
// as of day (date) is birth day (date) and
// as of time is on or after birth time
if ( dtAsOfDate.getUTCDate() > dtBirth.getUTCDate() ||
( dtAsOfDate.getUTCDate() == dtBirth.getUTCDate() && intSpan >= 0 ) )
{
// most recent day (date) anniversary is in as of month
dtAnniversary =
new Date( Date.UTC( dtAsOfDate.getUTCFullYear(),
dtAsOfDate.getUTCMonth(),
dtBirth.getUTCDate(),
dtBirth.getUTCHours(),
dtBirth.getUTCMinutes(),
dtBirth.getUTCSeconds() ) );
}
// if as of day (date) is before birth day (date) or
// as of day (date) is birth day (date) and
// as of time is before birth time
else
{
// most recent day (date) anniversary is in month before as of month
dtAnniversary =
new Date( Date.UTC( dtAsOfDate.getUTCFullYear(),
dtAsOfDate.getUTCMonth() - 1,
dtBirth.getUTCDate(),
dtBirth.getUTCHours(),
dtBirth.getUTCMinutes(),
dtBirth.getUTCSeconds() ) );
// get previous month
intMonths = dtAsOfDate.getUTCMonth() - 1;
if ( intMonths == -1 )
intMonths = 11;
// while month is not what it is supposed to be (it will be higher)
while ( dtAnniversary.getUTCMonth() != intMonths )
// move back one day
dtAnniversary.setUTCDate( dtAnniversary.getUTCDate() - 1 );
}
// if anniversary month is on or after birth month
if ( dtAnniversary.getUTCMonth() >= dtBirth.getUTCMonth() )
{
// months elapsed is anniversary month - birth month
intMonths = dtAnniversary.getUTCMonth() - dtBirth.getUTCMonth();
// years elapsed is anniversary year - birth year
intYears = dtAnniversary.getUTCFullYear() - dtBirth.getUTCFullYear();
}
// if birth month is after anniversary month
else
{
// months elapsed is months left in birth year + anniversary month
intMonths = (11 - dtBirth.getUTCMonth()) + dtAnniversary.getUTCMonth() + 1;
// years elapsed is year before anniversary year - birth year
intYears = (dtAnniversary.getUTCFullYear() - 1) - dtBirth.getUTCFullYear();
}
// to calculate weeks, days, hours, minutes and seconds
// we can take the difference from anniversary date and as of date
// get time span between two dates in milliseconds
intSpan = dtAsOfDate - dtAnniversary;
// get number of weeks
intWeeks = Math.floor(intSpan / 604800000);
// subtract weeks from time span
intSpan = intSpan - (intWeeks * 604800000);
// get number of days
intDays = Math.floor(intSpan / 86400000);
// subtract days from time span
intSpan = intSpan - (intDays * 86400000);
// get number of hours
intHours = Math.floor(intSpan / 3600000);
// subtract hours from time span
intSpan = intSpan - (intHours * 3600000);
// get number of minutes
intMinutes = Math.floor(intSpan / 60000);
// subtract minutes from time span
intSpan = intSpan - (intMinutes * 60000);
// get number of seconds
intSeconds = Math.floor(intSpan / 1000);
// create output string
if ( intYears > 0 )
if ( intYears > 1 )
strHowOld = intYears.toString() + ' Years';
else
strHowOld = intYears.toString() + ' Year';
else
strHowOld = '';
if ( intMonths > 0 )
if ( intMonths > 1 )
strHowOld = strHowOld + ' ' + intMonths.toString() + ' Months';
else
strHowOld = strHowOld + ' ' + intMonths.toString() + ' Month';
if ( intWeeks > 0 )
if ( intWeeks > 1 )
strHowOld = strHowOld + ' ' + intWeeks.toString() + ' Weeks';
else
strHowOld = strHowOld + ' ' + intWeeks.toString() + ' Week';
if ( intDays > 0 )
if ( intDays > 1 )
strHowOld = strHowOld + ' ' + intDays.toString() + ' Days';
else
strHowOld = strHowOld + ' ' + intDays.toString() + ' Day';
if ( intHours > 0 )
if ( intHours > 1 )
strHowOld = strHowOld + ' ' + intHours.toString() + ' Hours';
else
strHowOld = strHowOld + ' ' + intHours.toString() + ' Hour';
if ( intMinutes > 0 )
if ( intMinutes > 1 )
strHowOld = strHowOld + ' ' + intMinutes.toString() + ' Minutes';
else
strHowOld = strHowOld + ' ' + intMinutes.toString() + ' Minute';
if ( intSeconds > 0 )
if ( intSeconds > 1 )
strHowOld = strHowOld + ' ' + intSeconds.toString() + ' Seconds';
else
strHowOld = strHowOld + ' ' + intSeconds.toString() + ' Second';
}
else
strHowOld = 'Not Born Yet'
// return string representation
return strHowOld
}
// |
// qryHowOld |
// ---------------------------------------------------------------------------|






Comments
Snippets Manager replied on Sun, 2010/11/28 - 3:08am