public function generateStartDate(LeavePeriodDataHolder $leavePeriodDataHolder) { $dateFormat = $leavePeriodDataHolder->getDateFormat(); $isLeavePeriodStartOnFeb29th = $leavePeriodDataHolder->getIsLeavePeriodStartOnFeb29th(); $nonLeapYearLeavePeriodStartDate = $leavePeriodDataHolder->getNonLeapYearLeavePeriodStartDate(); $startDate = $leavePeriodDataHolder->getStartDate(); $startDate = $isLeavePeriodStartOnFeb29th == 'Yes' ? $nonLeapYearLeavePeriodStartDate : $startDate; $currentDate = $leavePeriodDataHolder->getCurrentDate(); $currentDateTimestamp = strtotime($currentDate); $currentYear = date('Y', strtotime($currentDate)); $startDate = $currentYear % 4 == 0 && $isLeavePeriodStartOnFeb29th == 'Yes' ? '02-29' : $startDate; $leavePeriodStartDate = $currentYear . '-' . $startDate; $leavePeriodStartDateTimestamp = strtotime($leavePeriodStartDate); if ($leavePeriodStartDateTimestamp > $currentDateTimestamp) { $leavePeriodStartDateTimestamp = strtotime('-1 year', $leavePeriodStartDateTimestamp); } $year = date('Y', $leavePeriodStartDateTimestamp); if ($isLeavePeriodStartOnFeb29th == 'Yes' && $year % 4 == 0) { return $year . '-' . '02-29'; } return date($dateFormat, $leavePeriodStartDateTimestamp); }