public function generateEndDate(LeavePeriodDataHolder $leavePeriodDataHolder) { $isLeavePeriodStartOnFeb29th = $leavePeriodDataHolder->getIsLeavePeriodStartOnFeb29th(); $nonLeapYearLeavePeriodStartDate = $leavePeriodDataHolder->getNonLeapYearLeavePeriodStartDate(); $dateFormat = $leavePeriodDataHolder->getDateFormat(); $leavePeriodStartDate = $leavePeriodDataHolder->getLeavePeriodStartDate(); $leavePeriodStartDateTimestamp = strtotime($leavePeriodStartDate); if ($isLeavePeriodStartOnFeb29th == 'Yes') { $nextYear = date('Y', strtotime('+1 year', $leavePeriodStartDateTimestamp)); if ($nextYear % 4 == 0) { return $nextYear . '-02-28'; } else { $nextLeavePeriodStartDate = $nextYear . '-' . $nonLeapYearLeavePeriodStartDate; $leavePeriodEndDateTimestamp = strtotime('-1 day', strtotime($nextLeavePeriodStartDate)); return date($dateFormat, $leavePeriodEndDateTimestamp); } } else { return date($dateFormat, strtotime('+1 year, -1 day', $leavePeriodStartDateTimestamp)); } }