Merge pull request #18802 from javieralapps4up/14.0

Close: #18801 Jan-30 + 1m IS NOT Mar-2
This commit is contained in:
Laurent Destailleur 2021-10-22 00:01:42 +02:00 committed by GitHub
commit f7b12208d1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -117,7 +117,7 @@ function getServerTimeZoneInt($refgmtdate = 'now')
* @param int $duration_unit Unit of added delay (d, m, y, w, h, i)
* @return int New timestamp
*/
function dol_time_plus_duree($time, $duration_value, $duration_unit)
function dol_time_plus_duree($time, $duration_value, $duration_unit, $ruleforendofmonth = 0)
{
global $conf;
@ -166,7 +166,31 @@ function dol_time_plus_duree($time, $duration_value, $duration_unit)
} else {
$date->add($interval);
}
//Change the behavior of PHP over data-interval when the result of this function is Feb 29 (non-leap years), 30 or Feb 31 (php returns March 1, 2 or 3 respectively)
if ($ruleforendofmonth == 1 && $duration_unit == 'm') {
$timeyear = dol_print_date($time, '%Y');
$timemonth = dol_print_date($time, '%m');
$timetotalmonths = (($timeyear * 12) + $timemonth);
$monthsexpected = ($timetotalmonths + $duration_value);
$newtime = $date->getTimestamp();
$newtimeyear = dol_print_date($newtime, '%Y');
$newtimemonth = dol_print_date($newtime, '%m');
$newtimetotalmonths = (($newtimeyear * 12) + $newtimemonth);
if ($monthsexpected < $newtimetotalmonths) {
$newtimehours = dol_print_date($newtime, '%H');
$newtimemins = dol_print_date($newtime, '%M');
$newtimesecs = dol_print_date($newtime, '%S');
$datelim = dol_mktime($newtimehours, $newtimemins, $newtimesecs, $newtimemonth, 1, $newtimeyear);
$datelim -= (3600 * 24);
$date->setTimestamp($datelim);
}
}
return $date->getTimestamp();
}