Code Coverage  | 
      ||||||||||
Classes and Traits  | 
       Functions and Methods  | 
       Lines  | 
      ||||||||
| Total |         | 
       100.00%  | 
       1 / 1  | 
               | 
       100.00%  | 
       3 / 3  | 
       CRAP |         | 
       100.00%  | 
       15 / 15  | 
      
| TimeRange |         | 
       100.00%  | 
       1 / 1  | 
               | 
       100.00%  | 
       3 / 3  | 
       8 |         | 
       100.00%  | 
       15 / 15  | 
      
| __construct |         | 
       100.00%  | 
       1 / 1  | 
       1 |         | 
       100.00%  | 
       3 / 3  | 
      |||
| contains |         | 
       100.00%  | 
       1 / 1  | 
       6 |         | 
       100.00%  | 
       8 / 8  | 
      |||
| normalize |         | 
       100.00%  | 
       1 / 1  | 
       1 |         | 
       100.00%  | 
       4 / 4  | 
      |||
| <?php | |
| namespace Puyo\Time; | |
| /** | |
| * 時刻範囲 | |
| * @author y.kushida | |
| * @version 1.0.0 | |
| * @uses >= php-5.4 | |
| */ | |
| class TimeRange | |
| { | |
| /** @var \DateTime */ | |
| protected $startTime; | |
| /** @var \DateTime */ | |
| protected $endTime; | |
| /** | |
| * 日付部分は無視される | |
| * @param \DateTime $startTime 開始時刻(<= target) | |
| * @param \DateTime $endTime 終了時刻(target <) | |
| */ | |
| public function __construct(\DateTime $startTime, \DateTime $endTime) { | |
| $this->startTime = $this->normalize($startTime); | |
| $this->endTime = $this->normalize($endTime); | |
| } | |
| /** | |
| * 指定した時刻が範囲内に含まれるか否かを返す | |
| * @param \DateTime $target 時刻(日付部分は無視される) | |
| * @return boolean startTime <= $target < endTime | |
| */ | |
| public function contains(\DateTime $target) { | |
| $time = $this->normalize($target); | |
| if($this->endTime >= $this->startTime) { | |
| // 日付またぎなし | |
| if($time >= $this->startTime && $time < $this->endTime) { | |
| return true; | |
| } else { | |
| return false; | |
| } | |
| } else { | |
| // 日付またぎあり | |
| if($time >= $this->startTime || $time < $this->endTime) { | |
| return true; | |
| } else { | |
| return false; | |
| } | |
| } | |
| } | |
| /** | |
| * | |
| * 渡されたDateTimeを破壊しないようcloneする。 | |
| * 利用側が時刻のみを指定してDateTimeを作れるよう、日付部分は固定値に上書きする。 | |
| * @param \DateTime $target | |
| * @return \DateTime | |
| */ | |
| public function normalize(\DateTime $target) { | |
| $strDateTime = $target->format('c'); | |
| $copiedTime = clone $target; | |
| $copiedTime->setDate(1970, 1, 1); | |
| return $copiedTime; | |
| } | |
| } |