/**
  * Testing end date falling into Feb 29th
  */
 public function testGenerateEndDate17()
 {
     $leavePeriodDataHolder = new LeavePeriodDataHolder();
     $leavePeriodDataHolder->setIsLeavePeriodStartOnFeb29th('No');
     $leavePeriodDataHolder->setDateFormat('Y-m-d');
     $leavePeriodDataHolder->setLeavePeriodStartDate('2011-03-01');
     $leavePeriodEndDate = $this->leavePeriodService->generateEndDate($leavePeriodDataHolder);
     $this->assertEquals('2012-02-29', $leavePeriodEndDate);
 }
 public function testGenerateStartDate16()
 {
     $leavePeriodDataHolder = new LeavePeriodDataHolder();
     $leavePeriodDataHolder->setIsLeavePeriodStartOnFeb29th('Yes');
     $leavePeriodDataHolder->setNonLeapYearLeavePeriodStartDate('04-01');
     $leavePeriodDataHolder->setDateFormat('Y-m-d');
     $leavePeriodDataHolder->setCurrentDate('2014-04-01');
     $leavePeriodStartDate = $this->leavePeriodService->generateStartDate($leavePeriodDataHolder);
     $this->assertEquals('2014-04-01', $leavePeriodStartDate);
 }
 private function _getPopulatedLeavePeriodDataHolder()
 {
     $leavePeriodDataHolder = new LeavePeriodDataHolder();
     $isLeavePeriodStartOnFeb29th = ParameterService::getParameter('isLeavePeriodStartOnFeb29th');
     $nonLeapYearLeavePeriodStartDate = ParameterService::getParameter('nonLeapYearLeavePeriodStartDate');
     $leavePeriodStartDate = ParameterService::getParameter('leavePeriodStartDate');
     $leavePeriodDataHolder->setIsLeavePeriodStartOnFeb29th($isLeavePeriodStartOnFeb29th);
     $leavePeriodDataHolder->setNonLeapYearLeavePeriodStartDate($nonLeapYearLeavePeriodStartDate);
     $leavePeriodDataHolder->setStartDate($leavePeriodStartDate);
     $leavePeriodDataHolder->setDateFormat('Y-m-d');
     return $leavePeriodDataHolder;
 }
 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);
 }