diff options
-rw-r--r-- | RecurringType.php | 51 |
1 files changed, 36 insertions, 15 deletions
diff --git a/RecurringType.php b/RecurringType.php index 5537e27..e8be50d 100644 --- a/RecurringType.php +++ b/RecurringType.php @@ -22,6 +22,13 @@ class RecurringType { const IS_RECURRING_EXCEPTION = ""; const IS_RECURRING_BREAK = "none"; + const TRANSPOSE_SIZE = array( + self::REC_TYPE_DAY => 1, + self::REC_TYPE_WEEK => 7, + self::REC_TYPE_MONTH => 1, + self::REC_TYPE_YEAR => 12 + ); + private $_fields_values = array(); private $_recurring_start_date_stamp; private $_recurring_end_date_stamp; @@ -235,32 +242,46 @@ class RecurringType { ); //Return recurring interval without correcting if it not belongs to assigned interval. - if(($intervalStartDateStamp >= $recurringEndDateStamp) || ($intervalEndDateStamp <= $recurringStartDateStamp)) + if (($intervalStartDateStamp >= $recurringEndDateStamp) || ($intervalEndDateStamp <= $recurringStartDateStamp)) return $recurringInterval; //Correct start date interval if it smaller then recurring start date. - if($intervalStartDateStamp < $recurringStartDateStamp) + if ($intervalStartDateStamp < $recurringStartDateStamp) $intervalStartDateStamp = $recurringStartDateStamp; //Correct end date interval if it smaller then recurring end date. - if($intervalEndDateStamp > $recurringEndDateStamp) + if ($intervalEndDateStamp > $recurringEndDateStamp) $intervalEndDateStamp = $recurringEndDateStamp; - $differenceStartDates = SchedulerHelperDate::differenceBetweenDates($intervalStartDateStamp, $recurringStartDateStamp); - $differenceEndDates = SchedulerHelperDate::differenceBetweenDates($intervalEndDateStamp, $recurringEndDateStamp); - $dateUnits = SchedulerHelperDate::$DATE_UNITS; + $type = $this->getRecurringTypeValue(); + //If recurring type is "year" then exit, else add months. + if ($type == self::REC_TYPE_DAY || $type == self::REC_TYPE_WEEK) { + $step = self::TRANSPOSE_SIZE[$type] * $this->getRecurringTypeStepValue(); + $day = 24 * 60 * 60; + $delta = floor(($intervalStartDateStamp - $recurringStartDateStamp) / ($day * $step)); + if ($delta > 0) + $recurringInterval["start_date_stamp"] = $recurringStartDateStamp + $delta * $step * $day; + } + else { + $differenceStartDates = SchedulerHelperDate::differenceBetweenDates($intervalStartDateStamp, $recurringStartDateStamp); + $differenceEndDates = SchedulerHelperDate::differenceBetweenDates($intervalEndDateStamp, $recurringEndDateStamp); + $dateUnits = SchedulerHelperDate::$DATE_UNITS; - //Add years. - $recurringInterval["start_date_stamp"] = SchedulerHelperDate::addYears($recurringStartDateStamp, $differenceStartDates[$dateUnits["year"]]); - $recurringInterval["end_date_stamp"] = SchedulerHelperDate::addYears($recurringEndDateStamp, -$differenceEndDates[$dateUnits["year"]]); + //Add years. + $recurringInterval["start_date_stamp"] = SchedulerHelperDate::addYears($recurringStartDateStamp, $differenceStartDates[$dateUnits["year"]]); + $recurringInterval["end_date_stamp"] = SchedulerHelperDate::addYears($recurringEndDateStamp, -$differenceEndDates[$dateUnits["year"]]); - //If recurring type is "year" then exit, else add months. - if($this->getRecurringTypeValue() == self::REC_TYPE_YEAR) - return $recurringInterval; - //Add months. - $recurringInterval["start_date_stamp"] = SchedulerHelperDate::addMonths($recurringInterval["start_date_stamp"], $differenceStartDates[$dateUnits["month"]]); - $recurringInterval["end_date_stamp"] = SchedulerHelperDate::addMonths($recurringInterval["end_date_stamp"], -$differenceEndDates[$dateUnits["month"]]); + if ($type == self::REC_TYPE_YEAR) + return $recurringInterval; + + //Add months. + $recurringInterval["start_date_stamp"] = SchedulerHelperDate::addMonths($recurringInterval["start_date_stamp"], $differenceStartDates[$dateUnits["month"]]); + $recurringInterval["end_date_stamp"] = SchedulerHelperDate::addMonths($recurringInterval["end_date_stamp"], -$differenceEndDates[$dateUnits["month"]]); + if ($type == self::REC_TYPE_MONTH) + return $recurringInterval; + } + return $recurringInterval; } |