Question

La durée des vidéos est enregistrée au format HH: MM: SS. Je voudrais l'afficher en tant que HH heures, MM minutes, SS secondes. Il ne devrait pas afficher les heures s'il est inférieur à 1.

Quelle serait la meilleure approche?

Était-ce utile?

La solution

essayez d'utiliser split

list($hh,$mm,$ss)= split(':',$duration);

Autres conseils

Quelque chose comme ça?

$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';

Un petit changement pourrait être:

$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";

Assez simple:

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

Ceci n'affichera que les heures ou les minutes s'il y en a et insère un " et " avant les secondes s'il y a des heures, des minutes ou les deux à afficher. Si vous voulez vraiment avoir de la fantaisie, vous pouvez ajouter du code pour afficher " heure " vs "heures" selon le cas, idem pour les minutes et les secondes.

Pourquoi s'embêter avec des expressions rationnelles ou des explosions lorsque PHP gère correctement le temps?

$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);

L’avantage est que vous pouvez reformater l’heure comme vous le souhaitez (y compris am / pm, ajustements du fuseau horaire, addition / soustraction, etc.).

Voici une manière différente, avec des fonctions différentes qui sont plus ouvertes et un pas à pas pour les débutants. il gère également les heures et les heures ... vous pouvez utiliser la même logique pour gérer les 0 minutes et les 0 secondes.

<?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';

?>

Je vous répondrai avec une approche différente du problème. Mon approche est de stocker les longueurs en secondes. Ensuite, selon les besoins, il est facile de convertir ces secondes en hh: mm: ss en utilisant:

print gmdate ($ seconds > = 3600? 'H: i: s': 'i: s', $ seconds); (pour votre question)

ou pour rechercher la longueur dans une base de données:

SELECT * FROM videos WHERE longueur > 300; , par exemple, pour rechercher une vidéo d’une durée supérieure à 5 minutes.

Si vous voulez vraiment utiliser une fonction intégrée, peut-être par robustesse, vous pouvez essayer

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

et utilisez l’une des fonctions de formatage de la date ( date () , strftime () , etc.) pour formater l’heure de votre choix. Ou vous pouvez utiliser la sortie de strptime ($ hms, '% T') . L'un ou l'autre peut être exagéré pour le scénario simple que vous avez.

explode () est pour les pensées. Il s'agit d'un travail pour les expressions régulières !

.
<?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");
}

Totalement non testé, mais quelque chose comme ça devrait fonctionner. Notez que ce code suppose que le fragment d'heure sera toujours toujours composé de deux chiffres (par exemple, une vidéo de trois heures correspond à 03:00:00 au lieu de 3: 00:00 ).

EDIT: Rétrospectivement, l’utilisation d’expressions régulières est probablement un cas de sur-ingénierie; explode () fera le travail aussi bien et sera probablement même plus rapide dans ce cas. Mais c’était la première méthode qui me venait à l’esprit lorsque je lisais la question.

Convertir 00:00:00 en heures, minutes et secondes en PHP est vraiment facile.

$ hours = 0; $ minutes = 0; $ secondes = 0;

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top