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; | |
} | |
} |