Как преобразовать 00:00:00 в часы, минуты, секунды в PHP?
У меня есть длительность видео, сохраненная в формате ЧЧ:ММ:СС. Я хотел бы отобразить его в часах ЧЧ, минутах ММ, секундах СС. Он не должен отображать часы, если они меньше 1.
Каков был бы наилучший подход?
10 answers
Попробуйте использовать split
list($hh,$mm,$ss)= split(':',$duration);
Что-то вроде этого?
$vals = explode(':', $duration);
if ( $vals[0] == 0 )
$result = $vals[1] . ' minutes, ' . $vals[2] . ' seconds';
else
$result = $vals[0] . 'hours, ' . $vals[1] . ' minutes, ' . $vals[2] . ' seconds';
Одним небольшим изменением может быть:
$vals = explode(':', $duration);
if ( $vals[0] == 0 )
$result = "{$vals[1]} minutes, {$vals[2]} seconds";
else
$result = "{$vals[0]} hours, {$vals[1]} minutes, {$vals[2]} seconds";
Довольно просто:
list( $h, $m, $s) = explode(':', $hms);
echo ($h ? "$h hours, " : "").($m ? "$m minutes, " : "").(($h || $m) ? "and " : "")."$s seconds";
Это будет отображать только часы или минуты, если таковые имеются, и вставляет "и" перед секундами, если для отображения есть часы, минуты или и то, и другое. Если вы хотите по-настоящему пофантазировать, вы могли бы добавить некоторый код для отображения "часа" или "часов" в зависимости от обстоятельств, то же самое для минут и секунд.
Зачем беспокоиться о регулярных выражениях или взрывах, когда php отлично обрабатывает время?
$sTime = '04:20:00';
$oTime = new DateTime($sTime);
$aOutput = array();
if ($oTime->format('G') > 0) {
$aOutput[] = $oTime->format('G') . ' hours';
}
$aOutput[] = $oTime->format('i') . ' minutes';
$aOutput[] = $oTime->format('s') . ' seconds';
echo implode(', ', $aOutput);
Преимущество заключается в том, что вы можете переформатировать время так, как вам нравится (включая am/pm, корректировки часового пояса, сложение/вычитание и т.д.).
Здесь другой способ, с другими функциями, который более открыт и более пошаговый для новичков. он также обрабатывает 1 час и много часов... вы можете попробовать использовать ту же логику для обработки 0 минут и 0 секунд.
<?php
// your time
$var = "00:00:00";
if(substr($var, 0, 2) == 0){
$myTime = substr_replace(substr_replace($var, '', 0, 3), ' Minutes, ', 2, 1);
}
elseif(substr($var, 1, 1) == 1){
$myTime = substr_replace(substr_replace($var, ' Hour, ', 2, 1), ' Minutes, ', 11, 1);
}
else{
$myTime = substr_replace(substr_replace($var, ' Hours, ', 2, 1), ' Minutes, ', 12, 1);
}
// work with your variable
echo $myTime .' Seconds';
?>
Я отвечу другим подходом к проблеме. Мой подход заключается в том, чтобы хранить длины в секундах. Затем, в зависимости от потребностей, легко отобразить эти секунды как чч:мм:сс с помощью:
print gmdate($seconds >= 3600 ? 'H:i:s' : 'i:s', $seconds);
( на ваш вопрос)
Или для поиска по длине в базе данных:
SELECT * FROM videos WHERE length > 300;
например, для поиска видео продолжительностью более 5 минут.
Если вы действительно хотите использовать встроенную функцию, возможно, для надежности, вы можете попробовать
date_default_timezone_set('UTC');
$date = strtotime($hms,0);
И используйте любую из функций форматирования даты (date()
, strftime()
, и т.д.), чтобы отформатировать время так, как вы пожелаете. Или вы можете использовать вывод strptime($hms,'%T')
. Любой из них может быть излишним для простого сценария, который у вас есть.
Взрыв() предназначен для анютиных глазок. Это задание для регулярных выражений!
<?php
preg_match('/^(\d\d):(\d\d):(\d\d)$/', $video_duration, $parts);
if ($parts[1] !== '00') {
echo("{$parts[1]} hours, {$parts[2]} minutes, {$parts[3]} seconds");
}
else {
echo("{$parts[2]} minutes, {$parts[3]} seconds");
}
Совершенно непроверенный, но что-то подобное должно сработать. Обратите внимание, что этот код предполагает, что часовой фрагмент всегда будет состоять из двух цифр (например, трехчасовое видео будет 03:00:00
вместо 3:00:00
).
РЕДАКТИРОВАТЬ: Оглядываясь назад, использование регулярных выражений для этого, вероятно, является случаем чрезмерной инженерии; explode() выполнит эту работу так же хорошо и, возможно, даже быстрее в это дело. Но это был первый метод, который пришел мне на ум, когда я прочитал вопрос.
Преобразование 00:00:00 в часы, минуты и секунды в PHP очень просто.
$часов = 0; $минут = 0; $секунды = 0;