Transport\Entity\Schedule\Stop::calculateDateTime PHP Method

calculateDateTime() public static method

Calculates a datetime by parsing the time and date given.
public static calculateDateTime ( string $time, DateTime $referenceDate, $stopPrognosis = null ) : DateTime
$time string The time to parse, can contain an optional offset prefix (e.g., "02d")
$referenceDate DateTime The date
return DateTime The parsed time in ISO format
    public static function calculateDateTime($time, \DateTime $referenceDate, $stopPrognosis = null)
    {
        // prevent changing the reference
        $date = clone $referenceDate;
        $offset = 0;
        if (substr($time, 2, 1) == 'd') {
            $offset = substr($time, 0, 2);
            $time = substr($time, 3);
        }
        $timeObj = \DateTime::createFromFormat('H:i:s', $time, $date->getTimezone());
        if ($timeObj === false) {
            $timeObj = \DateTime::createFromFormat('H:i', $time, $date->getTimezone());
        }
        $date->setTime($timeObj->format('H'), $timeObj->format('i'), $timeObj->format('s'));
        // check for passed midnight
        $referenceTime = strtotime($referenceDate->format('H:i'));
        $dateTime = strtotime($date->format('H:i'));
        if (isset($stopPrognosis->Dep->Time)) {
            $prognosisTime = strtotime((string) $stopPrognosis->Dep->Time);
            if ($dateTime < $referenceTime && $prognosisTime < $referenceTime && $dateTime - $prognosisTime < 0) {
                // we passed midnight
                $offset = 1;
            }
        } elseif ($dateTime < $referenceTime) {
            // we passed midnight
            $offset = 1;
        }
        $date->add(new \DateInterval('P' . $offset . 'D'));
        return $date;
    }

Usage Example

Esempio n. 1
0
 public function testParseDateTimeNoPrefix()
 {
     $this->assertEquals('2012-03-30T13:03:59+0200', Stop::calculateDateTime('13:03:59', $this->date)->format(\DateTime::ISO8601));
 }