Как конвертировать 00:00:00 в часы, минуты, секунды в PHP? - PullRequest
5 голосов
/ 17 сентября 2008

Длительность видео сохраняется в формате ЧЧ: ММ: СС. Я хотел бы отобразить это как ЧЧ часы, ММ минуты, СС секунды. Он не должен отображать часы, если он меньше 1.

Какой будет лучший подход?

Ответы [ 10 ]

3 голосов
/ 17 сентября 2008

Как то так?

$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';
2 голосов
/ 17 сентября 2008

попробуйте использовать split

list($hh,$mm,$ss)= split(':',$duration);
1 голос
/ 17 сентября 2008

Зачем беспокоиться о регулярном выражении или взрыве, когда 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 голос
/ 17 сентября 2008

Довольно просто:

list( $h, $m, $s) = explode(':', $hms);
echo ($h ? "$h hours, " : "").($m ? "$m minutes, " : "").(($h || $m) ? "and " : "")."$s seconds";

Это будет отображать только часы или минуты, если они есть, и вставлять «и» перед секундами, если есть часы, минуты или и то, и другое для отображения. Если вы хотите по-настоящему выглядеть модно, вы можете добавить код, который отображает «часы» и «часы», в зависимости от обстоятельств, то же самое для минут и секунд.

1 голос
/ 17 сентября 2008

Одно небольшое изменение может быть:

$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";
0 голосов
/ 17 сентября 2008

Я отвечу с другим подходом к проблеме. Мой подход заключается в том, чтобы хранить длины в секундах. Затем, в зависимости от потребностей, эти секунды легко отобразить в формате чч: мм: сс, используя:

print gmdate($seconds >= 3600 ? 'H:i:s' : 'i:s', $seconds); (по вашему вопросу)

или для поиска по длине в базе данных:

SELECT * FROM videos WHERE length > 300; например, для поиска видео продолжительностью более 5 минут.

0 голосов
/ 17 сентября 2008

Преобразование 00:00:00 в часы, минуты и секунды в PHP действительно просто.

$ часов = 0; $ минут = 0; $ секунд = 0;

0 голосов
/ 17 сентября 2008

Если вы действительно хотите использовать встроенную функцию, возможно, для надежности, вы можете попробовать

 date_default_timezone_set('UTC'); 
 $date = strtotime($hms,0); 

и используйте любую из функций форматирования даты (date(), strftime() и т. Д.) Для форматирования времени любым удобным для вас способом. Или вы можете использовать вывод strptime($hms,'%T'). Любой из них может быть излишним для простого сценария, который у вас есть.

0 голосов
/ 17 сентября 2008

Здесь по-другому, с различными функциями, которые более открыты и более шаг за шагом для новичков. он также обрабатывает 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';

?>
0 голосов
/ 17 сентября 2008

взорваться () для анютиных глазок. Это работа для регулярных выражений !

<?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 () сделает работу точно так же, и, возможно, даже будет быстрее в этом случае. Но это был первый способ вспомнить, когда я прочитал вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...