note 86086 modified in function.mktime by danbrown
| From: | danbrown@php.net | Date: | Thu, 02 Oct 2008 15:32:56 +0000 |
| Subject: | note 86086 modified in function.mktime by danbrown | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-144985@lists.php.net to get a copy of this message | ||
Here is what I use to calculate age. It took me 30 minutes to write and it's quite accurate.
What it has special is that it's calculating the number of days a year has (float number), by
testing if a year is a leap one or not. This number is used to compute the age.
<?php
function get_age($date_start, $date_end) {
$t_lived = get_timestamp($date_end) - get_timestamp($date_start);
$seconds_one_year = get_days_per_year($date_start, $date_end) * 24 * 60 * 60;
$age = array();
$age['years_exact'] = $t_lived / $seconds_one_year;
$age['years'] = floor($t_lived / $seconds_one_year);
$seconds_remaining = $t_lived % $seconds_one_year;
$age['days'] = round($seconds_remaining / (24 * 60 * 60));
return $age;
}
function get_timestamp($date) {
list($y, $m, $d) = explode('-', $date);
return mktime(0, 0, 0, $m, $d, $y);
}
function get_days_per_year($date_start, $date_end) {
list($y1) = explode('-', $date_start);
list($y2) = explode('-', $date_end);
$years_days = array();
for($y = $y1; $y <= $y2; $y++) {
$years_days[] = date('L', mktime(0, 0, 0, 1, 1, $y)) ? 366 : 365;
}
return round(array_sum($years_days) / count($years_days), 2);
}
$date_birth = '1979-10-12';
$date_now = date('Y-m-d');
$age = get_age($date_birth, $date_now);
echo '<pre>';
print_r($age);
echo '</pre>';
?>
It will display something like this:
Array
(
[years_exact] => 28.972974329491
[years] => 28
[days] => 355
)
--was--
Here is what I use to calculate age. It took me 30 minutes to write and it's quite accurate.
What it has special is that it's calculating the number of days a year has (float number), by
testing if a year is a leap one or not. This number is used to compute the age.
function get_age($date_start, $date_end) {
$t_lived = get_timestamp($date_end) - get_timestamp($date_start);
$seconds_one_year = get_days_per_year($date_start, $date_end) * 24 * 60 * 60;
$age = array();
$age['years_exact'] = $t_lived / $seconds_one_year;
$age['years'] = floor($t_lived / $seconds_one_year);
$seconds_remaining = $t_lived % $seconds_one_year;
$age['days'] = round($seconds_remaining / (24 * 60 * 60));
return $age;
}
function get_timestamp($date) {
list($y, $m, $d) = explode('-', $date);
return mktime(0, 0, 0, $m, $d, $y);
}
function get_days_per_year($date_start, $date_end) {
list($y1) = explode('-', $date_start);
list($y2) = explode('-', $date_end);
$years_days = array();
for($y = $y1; $y <= $y2; $y++) {
$years_days[] = date('L', mktime(0, 0, 0, 1, 1, $y)) ? 366 : 365;
}
return round(array_sum($years_days) / count($years_days), 2);
}
$date_birth = '1979-10-12';
$date_now = date('Y-m-d');
$age = get_age($date_birth, $date_now);
echo '<pre>';
print_r($age);
echo '</pre>';
It will display something like this:
Array
(
[years_exact] => 28.972974329491
[years] => 28
[days] => 355
)
http://php.net/manual/en/function.mktime.php