Roomify\Bat\Event\EventInterval::divide PHP Method

divide() public static method

Return the number of times a duration fits into the start and end date taking into account BAT's consideration that the end time for a BAT event includes that last minute.
public static divide ( DateTime $start_date, DateTime $end_date, DateInterval $duration ) : float
$start_date DateTime
$end_date DateTime
$duration DateInterval
return float
    public static function divide(\DateTime $start_date, \DateTime $end_date, \DateInterval $duration)
    {
        // Clone so that we don't change the original object. We are not using ImmutableDateTime to support PHP5.4
        $temp_end_date = clone $end_date;
        // Add a minute to deal with the fact that BAT considers the last minute included
        $temp_end_date->add(new \DateInterval('PT1M'));
        // Convert everything to seconds and calculate exactly how many times the duration fits in our event length
        $duration_seconds = $duration->d * 86400 + $duration->h * 3600 + $duration->i * 60 + $duration->s;
        $diff = $start_date->diff($temp_end_date);
        $diff_seconds = $diff->days * 86400 + $diff->h * 3600 + $diff->i * 60 + $diff->s;
        return $diff_seconds / $duration_seconds;
    }

Usage Example

Example #1
0
 public function testDivide2()
 {
     $start_date = new \DateTime('2016-02-11 12:00');
     $end_date = new \DateTime('2016-02-11 21:59');
     $duration = new \DateInterval('P1D');
     $percentage = EventInterval::divide($start_date, $end_date, $duration);
     $this->assertEquals(round($percentage, 2), 0.42);
     $duration = new \DateInterval('PT3H');
     $percentage = EventInterval::divide($start_date, $end_date, $duration);
     $this->assertEquals(round($percentage, 2), 3.33);
     $duration = new \DateInterval('PT2H');
     $percentage = EventInterval::divide($start_date, $end_date, $duration);
     $this->assertEquals(round($percentage, 2), 5);
     $duration = new \DateInterval('PT1H');
     $percentage = EventInterval::divide($start_date, $end_date, $duration);
     $this->assertEquals(round($percentage, 2), 10);
     $duration = new \DateInterval('PT30M');
     $percentage = EventInterval::divide($start_date, $end_date, $duration);
     $this->assertEquals(round($percentage, 2), 20);
     $duration = new \DateInterval('PT15M');
     $percentage = EventInterval::divide($start_date, $end_date, $duration);
     $this->assertEquals(round($percentage, 2), 40);
     $duration = new \DateInterval('PT10M');
     $percentage = EventInterval::divide($start_date, $end_date, $duration);
     $this->assertEquals(round($percentage, 2), 60);
     $duration = new \DateInterval('PT5M');
     $percentage = EventInterval::divide($start_date, $end_date, $duration);
     $this->assertEquals(round($percentage, 2), 120);
 }
All Usage Examples Of Roomify\Bat\Event\EventInterval::divide
EventInterval