Как повернуть время в формате HH:MM:SS
в число секунд?
PS Время может быть иногда в формате MM:SS
только MM:SS
.
Не нужно ничего explode
:
$str_time = "23:12:95"; $str_time = preg_replace("/^([\d]{1,2})\:([\d]{2})$/", "00:$1:$2", $str_time); sscanf($str_time, "%d:%d:%d", $hours, $minutes, $seconds); $time_seconds = $hours * 3600 + $minutes * 60 + $seconds;
И если вы не хотите использовать регулярные выражения:
$str_time = "2:50"; sscanf($str_time, "%d:%d:%d", $hours, $minutes, $seconds); $time_seconds = isset($seconds) ? $hours * 3600 + $minutes * 60 + $seconds : $hours * 60 + $minutes;
Я думаю, что самым простым способом было бы использовать strtotime()
:
$time = '21:30:10'; $seconds = strtotime("1970-01-01 $time UTC"); echo $seconds; // same with objects (for php5.3+) $time = '21:30:10'; $dt = new DateTime("1970-01-01 $time", new DateTimeZone('UTC')); $seconds = (int)$dt->getTimestamp(); echo $seconds;
демонстрация
Функция date_parse()
также может использоваться для синтаксического анализа даты и времени:
$time = '21:30:10'; $parsed = date_parse($time); $seconds = $parsed['hour'] * 3600 + $parsed['minute'] * 60 + $parsed['second'];
демонстрация
Если вы проанализируете формат MM:SS
с strtotime()
или date_parse()
он не будет работать ( date_parse()
используется в strtotime()
и DateTime
), потому что когда вы вводите формат, такой как парсер xx:yy
предполагается, что это HH:MM
и не MM:SS
. Я бы предложил проверить формат и добавить 00:
если у вас только MM:SS
.
demo strtotime()
demo date_parse()
Если у вас есть часы более 24, вы можете использовать следующую функцию (она будет работать для MM:SS
и HH:MM:SS
формат HH:MM:SS
):
function TimeToSec($time) { $sec = 0; foreach (array_reverse(explode(':', $time)) as $k => $v) $sec += pow(60, $k) * $v; return $sec; }
демонстрация
Попробуй это:
$time = "21:30:10"; $timeArr = array_reverse(explode(":", $time)); $seconds = 0; foreach ($timeArr as $key => $value) { if ($key > 2) break; $seconds += pow(60, $key) * $value; } echo $seconds;
В псевдокоде:
split it by colon seconds = 3600 * HH + 60 * MM + SS
просто
function timeToSeconds($time) { $timeExploded = explode(':', $time); if (isset($timeExploded[2])) { return $timeExploded[0] * 3600 + $timeExploded[1] * 60 + $timeExploded[2]; } return $timeExploded[0] * 3600 + $timeExploded[1] * 60; }
$time = 00:06:00; $timeInSeconds = strtotime($time) - strtotime('TODAY');
<?php $time = '21:32:32'; $seconds = 0; $parts = explode(':', $time); if (count($parts) > 2) { $seconds += $parts[0] * 3600; } $seconds += $parts[1] * 60; $seconds += $parts[2];
$time="12:10:05"; //your time echo strtotime("0000-00-00 $time")-strtotime("0000-00-00 00:00:00");
// HH:MM:SS or MM:SS echo substr($time , "-2"); // returns last 2 chars : SS