fitness-web/customerapi/models/available/EventInterval.php

98 lines
2.5 KiB
PHP

<?php
namespace customerapi\models\available;
use DateTime;
/**
* Class DateIntervalHelper
* @package customerapi\models\available
* @property \DateTime $firstActiveDate
* @property \DateTime $lastActiveDate
* @property \DateTime $firstDisplayDate
* @property \DateTime $lastDisplayDate
*/
class EventInterval
{
public $year;
public $month;
public $countOfActiveDays = 14;
public $daysToDisplay = 21;
public $firstActiveDate;
public $lastActiveDate;
public $firstDisplayDate;
public $lastDisplayDate;
private function __construct($today = null, $countOfActiveDays = 14,$daysToDisplay = 21)
{
$this->countOfActiveDays = $countOfActiveDays;
$this->daysToDisplay = $daysToDisplay;
if ( !isset($today)){
$today = new DateTime();
}
$today->setTime(0, 0);
$firstActiveDay = clone $today;
$firstActiveDay->setTime(0, 0);
$this->firstActiveDate = $firstActiveDay;
$lastActiveDay = clone $firstActiveDay;
$lastActiveDay->setTime(0, 0);
$lastActiveDay->modify('+' . $this->countOfActiveDays . ' day');
$this->lastActiveDate = $lastActiveDay;
$firstDisplayDate = clone $firstActiveDay;
$firstDisplayDate->modify('this week');
$firstDisplayDate->setTime(0, 0);
$this->firstDisplayDate = $firstDisplayDate;
$lastDisplayDate = clone $firstDisplayDate;
$lastDisplayDate->setTime(0, 0);
$lastDisplayDate->modify('+' . $this->daysToDisplay . ' day');
$this->lastDisplayDate = $lastDisplayDate;
}
public static function createInterval($today = null,$countOfActiveDays = 14,$daysToDisplay = 21)
{
return new EventInterval($today,$countOfActiveDays,$daysToDisplay);
}
/**
* @param DateTime $day
* @return bool true if active, otherwise false
*/
public function isActive($day)
{
$afterFirstActiveDay = $this->firstActiveDate < $day || $this->firstActiveDate == $day;
$beforeLastActiveDay = $this->lastActiveDate > $day || $this->lastActiveDate == $day;
return ($afterFirstActiveDay && $beforeLastActiveDay);
}
/**
* @return DateTime[]
*/
public function getAllDisplayDates()
{
$dates = array();
for ($i = 0; $i < $this->daysToDisplay; $i++) {
$date = clone $this->firstDisplayDate;
$date = $date->modify('+' . $i . ' day');
$dates[] = $date;
}
return $dates;
}
}