Tools\Utility\Time::parseLocalTime PHP Метод

parseLocalTime() публичный статический Метод

Parse 2,5 - 2.5 2:30 2:31:58 or even 2011-11-12 10:10:10 now supports negative values like -2,5 -2,5 -2:30 -:30 or -4
public static parseLocalTime ( string $duration, array $allowed = [':', '.', ','] ) : integer
$duration string
$allowed array
Результат integer Seconds
    public static function parseLocalTime($duration, array $allowed = [':', '.', ','])
    {
        if (empty($duration)) {
            return 0;
        }
        $parts = explode(' ', $duration);
        $duration = array_pop($parts);
        if (strpos($duration, '.') !== false && in_array('.', $allowed)) {
            $duration = static::decimalToStandardTime($duration, 2, ':');
        } elseif (strpos($duration, ',') !== false && in_array(',', $allowed)) {
            $duration = str_replace(',', '.', $duration);
            $duration = static::decimalToStandardTime($duration, 2, ':');
        }
        // now there is only the time schema left...
        $pieces = explode(':', $duration, 3);
        $res = 0;
        $hours = abs((int) $pieces[0]) * HOUR;
        //echo pre($hours);
        $isNegative = strpos((string) $pieces[0], '-') !== false ? true : false;
        if (count($pieces) === 3) {
            $res += $hours + (int) $pieces[1] * MINUTE + (int) $pieces[2] * SECOND;
        } elseif (count($pieces) === 2) {
            $res += $hours + (int) $pieces[1] * MINUTE;
        } else {
            $res += $hours;
        }
        if ($isNegative) {
            return -$res;
        }
        return $res;
    }

Usage Example

Пример #1
0
 /**
  * TimeTest::testParseTime()
  *
  * @return void
  */
 public function testParseLocalTime()
 {
     //echo $this->_header(__FUNCTION__);
     $tests = ['2:4' => 7440, '2:04' => 7440, '2' => 7200, '1,5' => 3600 + 1800, '1.5' => 3600 + 1800, '1.50' => 3600 + 1800, '1.01' => 3660, ':4' => 240, ':04' => 240, ':40' => 40 * MINUTE, '1:2:4' => 1 * HOUR + 2 * MINUTE + 4 * SECOND, '01:2:04' => 1 * HOUR + 2 * MINUTE + 4 * SECOND, '0:2:04' => 2 * MINUTE + 4 * SECOND, '::4' => 4 * SECOND, '::04' => 4 * SECOND, '::40' => 40 * SECOND, '2011-11-12 10:10:10' => 10 * HOUR + 10 * MINUTE + 10 * SECOND];
     // positive
     foreach ($tests as $was => $expected) {
         $is = $this->Time->parseLocalTime($was);
         //pr($is);
         $this->assertEquals($expected, $is);
     }
     unset($tests['2011-11-12 10:10:10']);
     // negative
     foreach ($tests as $was => $expected) {
         $is = $this->Time->parseLocalTime('-' . $was);
         //pr($is);
         $this->assertEquals(-$expected, $is);
     }
 }