From afeb2125202e314e8da32f19e51dc594812c1ecc Mon Sep 17 00:00:00 2001 From: Alexis Algoud Date: Thu, 30 Jun 2016 16:16:27 +0200 Subject: [PATCH] FIX #4682 dol_time_plus_duree use datetime instead of strtotime --- htdocs/core/lib/date.lib.php | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/htdocs/core/lib/date.lib.php b/htdocs/core/lib/date.lib.php index 17684564057..ba3a8c610de 100644 --- a/htdocs/core/lib/date.lib.php +++ b/htdocs/core/lib/date.lib.php @@ -117,12 +117,24 @@ function dol_time_plus_duree($time,$duration_value,$duration_unit) if ($duration_value == 0) return $time; if ($duration_unit == 'h') return $time + (3600*$duration_value); if ($duration_unit == 'w') return $time + (3600*24*7*$duration_value); - if ($duration_value > 0) $deltastring="+".abs($duration_value); - if ($duration_value < 0) $deltastring="-".abs($duration_value); - if ($duration_unit == 'd') { $deltastring.=" day"; } - if ($duration_unit == 'm') { $deltastring.=" month"; } - if ($duration_unit == 'y') { $deltastring.=" year"; } - return strtotime($deltastring,$time); + + $deltastring='P'; + + if ($duration_value > 0){ $deltastring.=abs($duration_value); $sub= false; } + if ($duration_value < 0){ $deltastring.=abs($duration_value); $sub= true; } + if ($duration_unit == 'd') { $deltastring.="D"; } + if ($duration_unit == 'm') { $deltastring.="M"; } + if ($duration_unit == 'y') { $deltastring.="Y"; } + + $date = new DateTime(); + $date->setTimezone(new DateTimeZone('UTC')); + $date->setTimestamp($time); + $interval = new DateInterval($deltastring); + + if($sub) $date->sub($interval); + else $date->add( $interval ); + + return $date->getTimestamp(); }