/**
  * @param DateTimeInterval $interval
  * @param \DateTime $date
  * @return static
  */
 public static function fromDateTimeInterval(DateTimeInterval $interval, \DateTime $date) : SingleDayTimeInterval
 {
     $thisDayInterval = self::buildWholeDayInterval($date);
     /** @var DateTimeInterval $intersection */
     $intersection = $thisDayInterval->getIntersection($interval);
     if ($intersection === NULL) {
         throw new InvalidArgumentException('Given day does not hits given interval. No intersection possible.');
     }
     $left = SingleDayTime::fromDateTime($intersection->getLeft()->getValue());
     $right = SingleDayTime::fromDateTime($intersection->getRight()->getValue());
     return new static(new SingleDayTimeBoundary($left, $intersection->getLeft()->getState()), new SingleDayTimeBoundary($right, $intersection->getRight()->getState()));
 }
Ejemplo n.º 2
0
 /**
  * @param SingleDayTime $other
  * @param int $sign -1 (sub) or 1 (add)
  * @throws ModificationNotPossibleException
  */
 private function addOrSub(SingleDayTime $other, int $sign)
 {
     $seconds = $this->seconds;
     $minutes = $this->minutes;
     $hours = $this->hours;
     $seconds += $sign * $other->getSeconds();
     $carryMinutes = 0;
     if ($seconds > 59 || $seconds < 0) {
         $carryMinutes = 1;
         $seconds += -$sign * 60;
     }
     $minutes += $sign * ($other->getMinutes() + $carryMinutes);
     $carryHours = 0;
     if ($minutes > 59 || $minutes < 0) {
         $carryHours = 1;
         $minutes += -$sign * 60;
     }
     $hours += $sign * ($other->getHours() + $carryHours);
     $this->validateModification($hours, $sign);
     $this->seconds = $seconds;
     $this->minutes = (int) $minutes;
     $this->hours = (int) $hours;
 }
 /**
  * @param string $string
  * @return SingleDayTimeBoundary
  */
 protected static function parseBoundary(string $string) : Boundary
 {
     list($elementString, $state) = self::parseBoundaryDataFromString($string);
     return new SingleDayTimeBoundary(SingleDayTime::from($elementString), $state);
 }
 /**
  * @param \DateTime|string|int $element
  * @param bool $state
  * @return SingleDayTimeBoundary
  */
 public static function create($element, bool $state) : SingleDayTimeBoundary
 {
     return new SingleDayTimeBoundary(SingleDayTime::from($element), $state);
 }