note 96129 deleted from function.date-diff by danbrown

From: Date: Wed, 10 Feb 2010 11:39:31 +0000
Subject: note 96129 deleted from function.date-diff by danbrown
References: 1  Groups: php.notes 
Request: Send a blank email to php-notes+get-165823@lists.php.net to get a copy of this message
Note Submitter: Anonymous ---- The function contributed by davix on 06-Oct-2009 07:46 returns wrong results when calculating the difference between dates that span a month boundary. It incorrectly uses the number of days in the later month. Simple math shows it cannot work: eg: two dates, one on January 31 and the other on February 2. Using the function it would calculate the difference in days as 28 - 31 + 2 = -1. It should instead be 31 - 31 + 2 = 2. Corrected function below: function dateDiff($d1, $d2) { // check higher timestamp and switch if necessary if ($d1 < $d2){ $temp = $d1; $d1 = $d2; $d2 = $temp; } else { $temp = $d2; // temp can be used for day count if required } $d1 = date_parse(date("Y-m-d H:i:s", $d1)); $d2 = date_parse(date("Y-m-d H:i:s", $d2)); // seconds if ($d1['second'] >= $d2['second']){ $diff['second'] = $d1['second'] - $d2['second']; } else { $d1['minute']--; $diff['second'] = 60 - $d2['second'] + $d1['second']; } // minutes if ($d1['minute'] >= $d2['minute']){ $diff['minute'] = $d1['minute'] - $d2['minute']; } else { $d1['hour']--; $diff['minute'] = 60 - $d2['minute'] + $d1['minute']; } // hours if ($d1['hour'] >= $d2['hour']){ $diff['hour'] = $d1['hour'] - $d2['hour']; } else { $d1['day']--; $diff['hour'] = 24 - $d2['hour'] + $d1['hour']; } // days if ($d1['day'] >= $d2['day']){ $diff['day'] = $d1['day'] - $d2['day']; } else { $d1['month']--; $diff['day'] = date("t",$temp) - $d2['day'] + $d1['day']; } // months if ($d1['month'] >= $d2['month']){ $diff['month'] = $d1['month'] - $d2['month']; } else { $d1['year']--; $diff['month'] = 12 - $d2['month'] + $d1['month']; } // years $diff['year'] = $d1['year'] - $d2['year']; return $diff; }

« previous php.notes (#165823) next »