note 99941 deleted from function.date-diff by danbrown
| From: | danbrown@php.net | Date: | Thu, 16 Sep 2010 15:51:11 +0000 |
| Subject: | note 99941 deleted from function.date-diff by danbrown | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-172652@lists.php.net to get a copy of this message | ||
Note Submitter: Sven Obser
----
Here is an incomplete workaround for PHP < 5.3.0
<?php
/**
* Workaround for PHP < 5.3.0
*/
if(!function_exists('date_diff')) {
class DateInterval {
public $y;
public $m;
public $d;
public $h;
public $i;
public $s;
public $invert;
public function format($format) {
$format = str_replace('%R%y', ($this->invert ? '-' : '+') .
$this->y, $format);
$format = str_replace('%R%m', ($this->invert ? '-' : '+') .
$this->m, $format);
$format = str_replace('%R%d', ($this->invert ? '-' : '+') .
$this->d, $format);
$format = str_replace('%R%h', ($this->invert ? '-' : '+') .
$this->h, $format);
$format = str_replace('%R%i', ($this->invert ? '-' : '+') .
$this->i, $format);
$format = str_replace('%R%s', ($this->invert ? '-' : '+') .
$this->s, $format);
$format = str_replace('%y', $this->y, $format);
$format = str_replace('%m', $this->m, $format);
$format = str_replace('%d', $this->d, $format);
$format = str_replace('%h', $this->h, $format);
$format = str_replace('%i', $this->i, $format);
$format = str_replace('%s', $this->s, $format);
return $format;
}
}
function date_diff(DateTime $date1, DateTime $date2) {
$diff = new DateInterval();
if($date1 > $date2) {
$tmp = $date1;
$date1 = $date2;
$date2 = $tmp;
$diff->invert = true;
}
$diff->y = ((int) $date2->format('Y')) - ((int) $date1->format('Y'));
$diff->m = ((int) $date2->format('n')) - ((int) $date1->format('n'));
if($diff->m < 0) {
$diff->y -= 1;
$diff->m = $diff->m + 12;
}
$diff->d = ((int) $date2->format('j')) - ((int) $date1->format('j'));
if($diff->d < 0) {
$diff->m -= 1;
$diff->d = $diff->d + ((int) $date1->format('t'));
}
$diff->h = ((int) $date2->format('G')) - ((int) $date1->format('G'));
if($diff->h < 0) {
$diff->d -= 1;
$diff->h = $diff->h + 24;
}
$diff->i = ((int) $date2->format('i')) - ((int) $date1->format('i'));
if($diff->i < 0) {
$diff->h -= 1;
$diff->i = $diff->i + 60;
}
$diff->s = ((int) $date2->format('s')) - ((int) $date1->format('s'));
if($diff->s < 0) {
$diff->i -= 1;
$diff->s = $diff->s + 60;
}
return $diff;
}
}
?>