Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
3 / 3
CRAP
100.00% covered (success)
100.00%
15 / 15
TimeRange
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
3 / 3
8
100.00% covered (success)
100.00%
15 / 15
 __construct
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
3 / 3
 contains
100.00% covered (success)
100.00%
1 / 1
6
100.00% covered (success)
100.00%
8 / 8
 normalize
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
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;
    }
}