예제 #1
0
 /**
  * @dataProvider provider
  */
 public function testReverseStartOfSmthModifier($day, $toTime)
 {
     $dateTime = new \DateTime('now', new \DateTimeZone('UTC'));
     $expressionModify = new ExpressionResult(new Token(Token::TYPE_VARIABLE, $day));
     $expression = new ExpressionResult(33);
     $expression->subtract($expressionModify);
     $result = $expression->getValue();
     $expectedDay = 33 - date('d', strtotime($toTime));
     $this->assertSame($expectedDay, (int) $result);
     $expression = new ExpressionResult(1);
     $expression->add($expressionModify);
     $result = $expression->getValue();
     $expectedDay = 1 + date('d', strtotime($toTime));
     $this->assertSame($expectedDay, $result->day);
 }
예제 #2
0
 public function testReverseAddition()
 {
     $expression = new ExpressionResult(2);
     $expressionModify = new ExpressionResult(new Token(Token::TYPE_VARIABLE, DateModifierInterface::VAR_THIS_DAY));
     $expression->add($expressionModify);
     $dateTime = new \DateTime('now', new \DateTimeZone('UTC'));
     $dateTime->add(new \DateInterval('P2D'));
     $expectedResult = $dateTime->format('d');
     $result = $expression->getValue();
     $this->assertSame((int) $expectedResult, (int) $result->day);
 }
예제 #3
0
 /**
  * @param ExpressionResult $value
  *
  * @throws SyntaxException
  * @return ExpressionResult
  */
 public function add(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->addDays($value->getValue());
                 break;
             case DateModifierInterface::VAR_THIS_WEEK:
                 $dateValue->addWeeks($value->getValue());
                 break;
             case DateModifierInterface::VAR_FMQ:
             case DateModifierInterface::VAR_THIS_MONTH:
                 $dateValue->addMonths($value->getValue());
                 break;
             case DateModifierInterface::VAR_THIS_QUARTER:
                 $dateValue->month(($dateValue->quarter + $value->getValue()) * 3);
                 break;
             case DateModifierInterface::VAR_THIS_YEAR:
                 $dateValue->addYears($value->getValue());
                 break;
             default:
                 throw new ExpressionDenied($this->getVariableLabel());
                 break;
         }
     } elseif (!$value->isModifier()) {
         $value->add($this);
         $this->value = $value->getValue();
     } else {
         $this->value += $value->getValue();
     }
     return $this;
 }