Re: date() problem
| From: | Kristen G. Thorson | Date: | Wed, 06 Jul 2005 21:32:22 +0000 |
| Subject: | Re: date() problem | ||
| References: | 1 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-218244@lists.php.net to get a copy of this message | ||
Ryan A wrote:
Hi, I'm confused, this should give me the age as 17 instead of 16...but it does not...any ideas why? <?php print date("Y:m:d"); $age="1988-07-06"; $day1=strtotime($age); $day2 = strtotime(date("Y-m-d")); $dif_s = ($day2-$day1); $dif_d = ($dif_s/60/60/24); $age = floor(($dif_d/365.24)); echo $age; ?> Thanks, RyanSubtracting the timestamps gives you 536457600 seconds, which is correct, but ( $dif_s / 60 / 60 / 24 ) gives you the actual number of days between these two dates. We say on *average* there are 365.25 days in a year, so 17 years (the correct age in years between these two dates) has about 17 * 365.25 = 6209.25 days. In actuality, there are 6209 days between these two dates. This seems close, but note that 6209.25 / 365.25 = 17 but 6209 / 365.25 = 16.9993155 And of course floor on 16.9993155 is still just 16. I don't think you can accurately calculate dates in this way without calculating the actual number of leap years between the two dates. Leap years occur every 4 years, and 17 / 4 = 4.25, so there were 4 leap years between 7/6/88 and 7/6/05 and therefore 365 * 17 + 4 = 6209 days, the actual number of days between these two dates. But note that ( 6209 - 4 ) / 365 = 17, which is correct. If you subtract the number of extra days due to leap years, then there are precisely 365 days in each year. It boils down to the fact that though there are on *average* 365.25 days in a calendar year, there are never *actually* 365.25 days in a calendar year. There are only either 365 or 366. kgt