/** * @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); }
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); }
/** * @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; }