diff options
author | sten <stenmarsh938@gmail.com> | 2016-03-11 21:51:53 +0300 |
---|---|---|
committer | sten <stenmarsh938@gmail.com> | 2016-03-11 21:51:53 +0300 |
commit | 68833dc3d9b49cec1d815909c0fb9f08bb6ee344 (patch) | |
tree | dbde04c21f45cf3ade1dd2d00412f69214f7078f /RecurringType.php | |
parent | ddf59163cf912bfea6f7d307f40413d79837db9e (diff) | |
download | scheduler-helper-php-68833dc3d9b49cec1d815909c0fb9f08bb6ee344.zip scheduler-helper-php-68833dc3d9b49cec1d815909c0fb9f08bb6ee344.tar.gz scheduler-helper-php-68833dc3d9b49cec1d815909c0fb9f08bb6ee344.tar.bz2 |
Fix weekly recurring week misplacing.
Diffstat (limited to 'RecurringType.php')
-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; } |