note 38806 added to function.date
| From: | T dot E at rn2 dot php dot net | Date: | Wed, 07 Jan 2004 16:15:41 +0000 |
| Subject: | note 38806 added to function.date | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-63083@lists.php.net to get a copy of this message | ||
Most functions calculating the difference in days between two days take some assumptions. They often
ignore leap-years or decide to set a month to 30 days. This one here should work better and more
precise.
I left one thing to fix: I supposed a leap in every four years. This assumption is wrong when
passing a xx00-border, if xx00 mod 400 != 0. However, PHPs date-function won't work with 1900
or less and 2100 or more. So for the next few years within the given boarders of PHP, this one
should work.
function date_diff($dat1,$dat2)
/* Dat1 and Dat2 passed as "YYYY-MM-DD" */
{
$tmp_dat1 = mktime(0,0,0,
substr($dat1,5,2),substr($dat1,8,2),substr($dat1,0,4));
$tmp_dat2 = mktime(0,0,0,
substr($dat2,5,2),substr($dat2,8,2),substr($dat2,0,4));
$yeardiff = date('Y',$tmp_dat1)-date('Y',$tmp_dat2);
/* a leap year in every 4 years and the days-difference */
$diff = date('z',$tmp_dat1)-date('z',$tmp_dat2) +
floor($yeardiff /4)*1461;
/* remainder */
for ($yeardiff = $yeardiff % 4; $yeardiff>0; $yeardiff--)
{
$diff += 365 + date('L',
mktime(0,0,0,1,1,
intval(
substr(
(($tmp_dat1>$tmp_dat2) ? $dat1 : $dat2),0,4))
-$yeardiff+1));
}
return $diff;
}
----
Manual Page -- http://www.php.net/manual/en/function.date.php
Edit -- http://master.php.net/manage/user-notes.php?action=edit+38806
Delete -- http://master.php.net/manage/user-notes.php?action=delete+38806&report=yes
Reject -- http://master.php.net/manage/user-notes.php?action=reject+38806&report=yes
Search -- http://master.php.net/manage/user-notes.php