/** * @param ExpressionResult $value * * @throws SyntaxException * @return ExpressionResult */ public function subtract(ExpressionResult $value) { if (!$this->isModifier()) { /** @var Carbon $dateValue */ $dateValue = $this->getValue(); switch ($this->getVariableType()) { case DateModifierInterface::VAR_NOW: case DateModifierInterface::VAR_TODAY: case DateModifierInterface::VAR_THIS_DAY: case DateModifierInterface::VAR_SOW: case DateModifierInterface::VAR_SOM: case DateModifierInterface::VAR_SOQ: case DateModifierInterface::VAR_SOY: case DateModifierInterface::VAR_FDQ: $dateValue->subDays($value->getValue()); break; case DateModifierInterface::VAR_THIS_WEEK: $dateValue->subWeeks($value->getValue()); break; case DateModifierInterface::VAR_FMQ: case DateModifierInterface::VAR_THIS_MONTH: $dateValue->subMonths($value->getValue()); break; case DateModifierInterface::VAR_THIS_QUARTER: $dateValue->month(($dateValue->quarter - $value->getValue()) * 3); break; case DateModifierInterface::VAR_THIS_YEAR: $dateValue->subYears($value->getValue()); break; default: throw new ExpressionDenied($this->getVariableLabel()); break; } } elseif (!$value->isModifier()) { switch ($value->getVariableType()) { case DateModifierInterface::VAR_NOW: case DateModifierInterface::VAR_TODAY: case DateModifierInterface::VAR_THIS_DAY: case DateModifierInterface::VAR_SOW: case DateModifierInterface::VAR_SOM: case DateModifierInterface::VAR_SOQ: case DateModifierInterface::VAR_SOY: case DateModifierInterface::VAR_FDQ: $this->value -= $value->getValue()->day; break; case DateModifierInterface::VAR_THIS_WEEK: $this->value -= $value->getValue()->format('W'); break; case DateModifierInterface::VAR_FMQ: case DateModifierInterface::VAR_THIS_MONTH: $this->value -= $value->getValue()->month; break; case DateModifierInterface::VAR_THIS_QUARTER: $this->value -= $value->getValue()->quarter; break; case DateModifierInterface::VAR_THIS_YEAR: $this->value -= $value->getValue()->year; break; default: throw new ExpressionDenied($value->getVariableLabel()); break; } } else { $this->value -= $value->getValue(); } return $this; }