note 93914 deleted from function.mktime by aharvey

From: Date: Fri, 07 Sep 2012 01:17:04 +0000
Subject: note 93914 deleted from function.mktime by aharvey
References: 1  Groups: php.notes 
Request: Send a blank email to php-notes+get-190562@lists.php.net to get a copy of this message
Note Submitter: davix ---- I couldn't find any correct date differentiate function anywhere so I wrote this one which works correctly. It's fully resistant to all troubles with different day count of the month or leap year. Input must be two timestamps and output is associative array with year, month, day, hour, minute, second items. It can be used for exact age or similar issues. <?php function date_diff($d1, $d2){ /* compares two timestamps and returns array with differencies (year, month, day, hour, minute, second) */ //check higher timestamp and switch if neccessary if ($d1 < $d2){ $temp = $d2; $d2 = $d1; $d1 = $temp; } else { $temp = $d1; //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; } $born_date = mktime(6,30,0,7,24,2008); $date_diff_array = date_diff($born_date, time()); print_r($date_diff_array); ?>

« previous php.notes (#190562) next »