Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What can use for DateTime::diff() for PHP 5.2?

Tags:

php

php-5.2

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; 
like image 252
shin Avatar asked Oct 27 '10 12:10

shin


People also ask

How get DateTime Diff in PHP?

PHP date_diff() Function $date1=date_create("2013-03-15"); $date2=date_create("2013-12-12"); $diff=date_diff($date1,$date2);

How will you get the difference between 2 DateTime values in seconds in PHP?

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.


2 Answers

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).

like image 71
Christopher Pickslay Avatar answered Oct 02 '22 03:10

Christopher Pickslay


I just needed that ( unfortunately ) for a WordPress plugin. This I use the function in 2 times:

  1. 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; } 
  2. 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.

like image 21
nembleton Avatar answered Oct 02 '22 02:10

nembleton