• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 347
  • Last Modified:

calculate age from dob??

Below is how i store a dob... by using echo $getuserprofile['dob']; i can echo a users dob...but who can i work out there age?
<?php  
	$months = array (1 => 'January', 'February', 'March', 'April', 'May', 'June','July', 'August', 'September', 'October', 'November', 'December');
$weekday = array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday');
$days = range (1, 31);
$years = range (1910, 2015);
 
//**********************************************
 
echo "Day: <select name='day'>";
foreach ($days as $value) {
   echo '<option ';
   if($splitDate[0] == $value)
      echo 'selected="selected"';
   echo ' value="'.$value.'">'.$value.'</option>\n';
} echo '</select>';
 
echo "Month: <select name='month'>";
foreach ($months as $value) {
 
   echo '<option ';
   if($splitDate[1]==$value) 
      echo "selected='selected'";
   echo 'value="'.$value.'">'.$value.'</option>\n';
} echo '</select>';
 
echo "Year: <select name='year'>";
foreach ($years as $value) {
   echo '<option ';
   if($splitDate[2]==$value)
      echo 'selected="selected"';
   echo " value='".$value."'>".$value."</option>\n";
} 
$dob = $day.'-'.$month.'-'.$year; 
 ?>

Open in new window

0
runnerjp
Asked:
runnerjp
  • 3
  • 2
1 Solution
 
Michael701Commented:
try this
$today=getdate();
$age=$today['year']-$dob_year-1;
// now have they had a birthday this year?
if ($today['month']>$dob_month)
  $age++;
else
  if ($today['month']==$dob_month)
    if ($today['mday']>=$dob_day)
      $age++;
 
echo $age;

Open in new window

0
 
Ray PaseurCommented:

<?php // RAY compute_age_from_dob.php
 
// TEST DATA
$dob = '15'.'-'.'09'.'-'.'1950';
 
// GET TIMESTAMPS
$ts_dob = strtotime($dob);
$ts_now = time();
 
// DIFFERENCE IN YEARS
$years = date('Y', $ts_now) - date('Y', $ts_dob);
 
// IF BEFORE THE BIRTHDAY
$mdnow = date('m-d', $ts_now);
$mddob = date('m-d', $ts_dob);
if ($mdnow < $mddob) $years--;
 
// SHOW THE ANSWER
echo $years;

Open in new window

0
 
runnerjpAuthor Commented:
soryy i should have said i display dob as 19-December-1987   so would i need to somehow convert the month into numeric?
0
Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

 
Ray PaseurCommented:
That should work OK with strtotime()

http://www.laprbass.com/RAY_strtotime.php?s=19-December-1987

HTH, ~Ray
0
 
Michael701Commented:

// since you already $months, this should get the month number
$dob_month = array_keys ( $months, $dob_month_text );
 
 
// but really you should
 
echo "Month: <select name='month'>";
foreach ($months as $month_number=>$month_name) {
 
   echo '<option ';
   if($splitDate[1]==$month_name) 
      echo "selected='selected' ";
   echo 'value="'.$month_number.'">'.$month_name.'</option>\n';
} echo '</select>';

Open in new window

0
 
Ray PaseurCommented:
One note, not directly at issue here, but useful as a "best practices" approach to handling dates.  Make all internal representations into ISO8601 date/time strings.  php date('c') gives you the traditional format

YYYY-MM-DD HH:MM:SS

This is useful because you can use it with strtotime and date() to format dates and times for output, and you can see the columns line up in reports.  Also, it collates and compares correctly whether in a timestamp or a character string.
0

Featured Post

New feature and membership benefit!

New feature! Upgrade and increase expert visibility of your issues with Priority Questions.

  • 3
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now