Is there any function equivalent to DateTime::diff() in PHP 5.2?
My local server is PHP 5.3 and using DateTime::diff(). then I found that my live site uses PHP 5.2 and gives an error.
Fatal error: Call to undefined method DateTime::diff() in /var/www/some/other/dir/web/daikon/modules/projects/views/admin/log/admin_log_list.php on line 40
The PHP code:
foreach ($logs as $key => $list){ ... // show date in European way dd-mm-yyyy not in MySQL way yyyy-mm-dd $newdate =new DateTime($list['date']) ; echo "<td class=\"left\" width=\"8%\">".$newdate->format('d-m-Y')."</td>\n"; $starttime = new DateTime($list['start_time']); echo "<td width=\"7%\">".date_format($starttime, 'H:i')."</td>\n"; $finishtime = new DateTime($list['finish_time']); echo "<td width=\"8%\">".date_format($finishtime, 'H:i')."</td>\n"; $timediff = 0; $interval = $starttime->diff($finishtime); $hours = $interval->format('%h'); $minutes = $interval->format('%i'); $timediff = $hours * 60 + $minutes;
PHP date_diff() Function $date1=date_create("2013-03-15"); $date2=date_create("2013-12-12"); $diff=date_diff($date1,$date2);
1 Answer. Show activity on this post. $timeFirst = strtotime('2011-05-12 18:20:20'); $timeSecond = strtotime('2011-05-13 18:20:20'); $differenceInSeconds = $timeSecond - $timeFirst; You will then be able to use the seconds to find minutes, hours, days, etc.
Spudley's answer doesn't work for me--subtracting any DateTime from another gives 0 on my system.
I was able to get it to work by using DateTime::format with the 'U' specifier (seconds since Unix epoch):
$start = new DateTime('2010-10-12'); $end = new DateTime(); $days = round(($end->format('U') - $start->format('U')) / (60*60*24));
This works on both my dev system (5.3.4) and my deployment system (5.2.11).
I just needed that ( unfortunately ) for a WordPress plugin. This I use the function in 2 times:
In my class calling ->diff() ( my class extends DateTime, so $this is the reference DateTime )
function diff ($secondDate){ $firstDateTimeStamp = $this->format("U"); $secondDateTimeStamp = $secondDate->format("U"); $rv = ($secondDateTimeStamp - $firstDateTimeStamp); $di = new DateInterval($rv); return $di; }
Then I recreated a fake DateInterval class ( because DateInterval is only valid in PHP >= 5.3 ) as follows:
Class DateInterval { /* Properties */ public $y = 0; public $m = 0; public $d = 0; public $h = 0; public $i = 0; public $s = 0; /* Methods */ public function __construct ( $time_to_convert /** in seconds */) { $FULL_YEAR = 60*60*24*365.25; $FULL_MONTH = 60*60*24*(365.25/12); $FULL_DAY = 60*60*24; $FULL_HOUR = 60*60; $FULL_MINUTE = 60; $FULL_SECOND = 1; // $time_to_convert = 176559; $seconds = 0; $minutes = 0; $hours = 0; $days = 0; $months = 0; $years = 0; while($time_to_convert >= $FULL_YEAR) { $years ++; $time_to_convert = $time_to_convert - $FULL_YEAR; } while($time_to_convert >= $FULL_MONTH) { $months ++; $time_to_convert = $time_to_convert - $FULL_MONTH; } while($time_to_convert >= $FULL_DAY) { $days ++; $time_to_convert = $time_to_convert - $FULL_DAY; } while($time_to_convert >= $FULL_HOUR) { $hours++; $time_to_convert = $time_to_convert - $FULL_HOUR; } while($time_to_convert >= $FULL_MINUTE) { $minutes++; $time_to_convert = $time_to_convert - $FULL_MINUTE; } $seconds = $time_to_convert; // remaining seconds $this->y = $years; $this->m = $months; $this->d = $days; $this->h = $hours; $this->i = $minutes; $this->s = $seconds; } }
Hope that helps somebody.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With