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