summaryrefslogtreecommitdiffstats
path: root/RecurringType.php
diff options
context:
space:
mode:
authorsten <stenmarsh938@gmail.com>2016-03-11 21:51:53 +0300
committersten <stenmarsh938@gmail.com>2016-03-11 21:51:53 +0300
commit68833dc3d9b49cec1d815909c0fb9f08bb6ee344 (patch)
treedbde04c21f45cf3ade1dd2d00412f69214f7078f /RecurringType.php
parentddf59163cf912bfea6f7d307f40413d79837db9e (diff)
downloadscheduler-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.php51
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;
}