note 93914 added to function.mktime
| From: | davix at osu1 dot php dot net | Date: | Tue, 06 Oct 2009 19:39:23 +0000 |
| Subject: | note 93914 added to function.mktime | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-161411@lists.php.net to get a copy of this message | ||
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);
?>
----
Server IP: 87.124.86.41
Probable Submitter: 89.103.123.67 (proxied: 89.103.123.67)
----
Manual Page -- http://www.php.net/manual/en/function.mktime.php
Edit -- https://master.php.net/note/edit/93914
Del: integrated -- https://master.php.net/note/delete/93914/integrated
Del: useless -- https://master.php.net/note/delete/93914/useless
Del: bad code -- https://master.php.net/note/delete/93914/bad+code
Del: spam -- https://master.php.net/note/delete/93914/spam
Del: non-english -- https://master.php.net/note/delete/93914/non-english
Del: in docs -- https://master.php.net/note/delete/93914/in+docs
Del: other reasons-- https://master.php.net/note/delete/93914
Reject -- https://master.php.net/note/reject/93914
Search -- https://master.php.net/manage/user-notes.php