diff --git a/CRM/Member/BAO/MembershipStatus.php b/CRM/Member/BAO/MembershipStatus.php index c7ddc7636c9e..fdd17ff08295 100644 --- a/CRM/Member/BAO/MembershipStatus.php +++ b/CRM/Member/BAO/MembershipStatus.php @@ -240,12 +240,6 @@ public static function getMembershipStatusByDate( foreach ($dates as $dat) { if (${$dat . 'Date'} && ${$dat . 'Date'} != "null") { ${$dat . 'Date'} = CRM_Utils_Date::customFormat(${$dat . 'Date'}, '%Y%m%d'); - - ${$dat . 'Year'} = substr(${$dat . 'Date'}, 0, 4); - - ${$dat . 'Month'} = substr(${$dat . 'Date'}, 4, 2); - - ${$dat . 'Day'} = substr(${$dat . 'Date'}, 6, 2); } else { ${$dat . 'Date'} = ''; @@ -266,13 +260,15 @@ public static function getMembershipStatusByDate( ORDER BY weight ASC"; $membershipStatus = CRM_Core_DAO::executeQuery($query); - $hour = $minute = $second = 0; while ($membershipStatus->fetch()) { $startEvent = NULL; $endEvent = NULL; foreach ($events as $eve) { foreach ($dates as $dat) { + $month = date('m', strtotime(${$dat . 'Date'})); + $day = date('d', strtotime(${$dat . 'Date'})); + $year = date('Y', strtotime(${$dat . 'Date'})); // calculate start-event/date and end-event/date if (($membershipStatus->{$eve . '_event'} == $dat . '_date') && ${$dat . 'Date'} @@ -281,27 +277,27 @@ public static function getMembershipStatusByDate( $membershipStatus->{$eve . '_event_adjust_interval'} ) { // add in months - if ($membershipStatus->{$eve . '_event_adjust_unit'} == 'month') { - ${$eve . 'Event'} = date('Ymd', mktime($hour, $minute, $second, - ${$dat . 'Month'} + $membershipStatus->{$eve . '_event_adjust_interval'}, - ${$dat . 'Day'}, - ${$dat . 'Year'} + if ($membershipStatus->{$eve . '_event_adjust_unit'} === 'month') { + ${$eve . 'Event'} = date('Ymd', mktime(0, 0, 0, + $month + $membershipStatus->{$eve . '_event_adjust_interval'}, + $day, + $year )); } // add in days - if ($membershipStatus->{$eve . '_event_adjust_unit'} == 'day') { - ${$eve . 'Event'} = date('Ymd', mktime($hour, $minute, $second, - ${$dat . 'Month'}, - ${$dat . 'Day'} + $membershipStatus->{$eve . '_event_adjust_interval'}, - ${$dat . 'Year'} + if ($membershipStatus->{$eve . '_event_adjust_unit'} === 'day') { + ${$eve . 'Event'} = date('Ymd', mktime(0, 0, 0, + $month, + $day + $membershipStatus->{$eve . '_event_adjust_interval'}, + $year )); } // add in years - if ($membershipStatus->{$eve . '_event_adjust_unit'} == 'year') { - ${$eve . 'Event'} = date('Ymd', mktime($hour, $minute, $second, - ${$dat . 'Month'}, - ${$dat . 'Day'}, - ${$dat . 'Year'} + $membershipStatus->{$eve . '_event_adjust_interval'} + if ($membershipStatus->{$eve . '_event_adjust_unit'} === 'year') { + ${$eve . 'Event'} = date('Ymd', mktime(0, 0, 0, + $month, + $day, + $year + $membershipStatus->{$eve . '_event_adjust_interval'} )); } // if no interval and unit, present