コード例 #1
0
ファイル: ExpressionResult.php プロジェクト: Maksold/platform
 /**
  * @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;
 }