Преобразовать время в формате ЧЧ: ММ: СС в секунды?
Как перевести время в формат HH:MM:SS
в плоское число секунд?
PS Время может быть иногда в формате MM:SS
только.
12 ответов
Не нужно 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
,
демонстрация strtotime()
демонстрация date_parse()
Если у вас есть часы более 24, то вы можете использовать следующую функцию (она будет работать для 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 = 00:06:00;
$timeInSeconds = strtotime($time) - strtotime('TODAY');
Вы можете использовать strtotime
функция для возврата количества секунд из today 00:00:00
,
$seconds= strtotime($time) - strtotime('00:00:00');
В псевдокоде:
split it by colon
seconds = 3600 * HH + 60 * MM + SS
Попробуй это:
$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;
Просто
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;
}
function time2sec($time) {
$durations = array_reverse(explode(':', $item->duration));
$second = array_shift($durations);
foreach ($durations as $duration) {
$second += (60 * $duration);
}
return $second;
}
echo time2sec('4:52'); // 292
echo time2sec('2:01:42'); // 7302
В 32-битной версии PHP для Windows: 7.2.31 я получаю сообщение об ошибке во всех опубликованных здесь версиях. Если время было 00:00:00 или 00:00:00, возвращались нули 00 и использовались как "" пустая строка, а вычисление с пустой строкой возвращало ошибку "A Non WELLNUMERIC blabla.
Это работает также с более чем 24 часами:
function TimeToSec(string $time) {
$timearray = explode(":",$time);
$hours = (int)$timearray[0];
$minutes = (int)$timearray[1];
$seconds = (int)$timearray[2];;
//echo "Hours: " . $hours ."<br>";
//echo "minutes: " . $minutes ."<br>";
//echo "seconds: " . $seconds ."<br>";
$value = ($hours * 3600) + ($minutes * 60) + $seconds;
return $value;
}
echo TimeToSec("25:00:30");
<?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