Voici une méthode pour jDateTime que j'ai recodé pour nos besoins personnels. Si ça vous tente, faites en bon usage :
/**
* Substract a date with another
*
* @return OBDate
* @author Hadrien Lanneau <hadrien@over-blog.com>
*/
public function substract($date = null)
{
if (!$date)
{
$date = new OBDate();
$date->now();
}
$newDate = new OBDate();
$items = array(
'second',
'minute',
'hour',
'day',
'month',
'year'
);
foreach ($items as $k => $i)
{
$newDate->{$i} = $date->{$i} - $this->{$i};
if ($newDate->{$i} < 0)
{
switch ($i)
{
case 'second':
case 'minute':
$sub = 60;
break;
case 'hour':
$sub = 24;
break;
case 'day':
switch ($this->month)
{
// Mois à 31 jours
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
$sub = 31;
break;
// Mois à 30 jours
case 4:
case 6:
case 9:
case 11:
$sub = 30;
break;
// Février
case 2:
if ($this->year % 4 == 0 and
!(
$this->year % 100 == 0 and
$this->year % 400 != 0
))
{
// Bissextile
$sub = 29;
}
else
{
$sub = 28;
}
break;
}
break;
case 'month':
$sub = 12;
break;
default:
$sub = 0;
}
$newDate->{$i} = abs($sub + $newDate->{$i});
if (isset($items[$k+1]))
{
$date->{$items[$k+1]}--;
}
}
}
return $newDate;
}