note 86086 added to function.mktime

From: Date: Thu, 02 Oct 2008 15:29:54 +0000
Subject: note 86086 added to function.mktime
Groups: php.notes 
Request: Send a blank email to php-notes+get-144984@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. 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 ) ---- Server IP: 194.102.65.226 Probable Submitter: 86.121.233.11 ---- Manual Page -- http://www.php.net/manual/en/function.mktime.php Edit -- https://master.php.net/note/edit/86086 Del: integrated -- https://master.php.net/note/delete/86086/integrated Del: useless -- https://master.php.net/note/delete/86086/useless Del: bad code -- https://master.php.net/note/delete/86086/bad+code Del: spam -- https://master.php.net/note/delete/86086/spam Del: non-english -- https://master.php.net/note/delete/86086/non-english Del: in docs -- https://master.php.net/note/delete/86086/in+docs Del: other reasons-- https://master.php.net/note/delete/86086 Reject -- https://master.php.net/note/reject/86086 Search -- https://master.php.net/manage/user-notes.php

« previous php.notes (#144984) next »