Ejemplo n.º 1
0
 /**
  * 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
  * @param string
  * @return int: seconds
  * 2011-03-06 ms
  */
 public static function parseTime($duration, $allowed = array(':', '.', ','))
 {
     if (empty($duration)) {
         return 0;
     }
     $parts = explode(' ', $duration);
     $duration = array_pop($parts);
     if (strpos($duration, '.') !== false && in_array('.', $allowed)) {
         App::uses('NumberLib', 'Tools.Lib');
         //$numberLib = new NumberLib();
         $duration = NumberLib::decimalToStandardTime($duration, 2, ':');
     } elseif (strpos($duration, ',') !== false && in_array(',', $allowed)) {
         App::uses('NumberLib', 'Tools.Lib');
         $duration = str_replace(',', '.', $duration);
         $duration = NumberLib::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;
 }