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