note 38806 added to function.date

From: 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

« previous php.notes (#63083) next »