Frage

Ich habe Videodauer gespeichert in HH: MM: SS-Format. Ich möchte es als HH Stunden anzuzeigen, MM Minuten SS Sekunden. Es soll nicht in Stunden angezeigt werden, wenn es weniger als 1 ist.

Was wäre der beste Ansatz?

War es hilfreich?

Lösung

versuchen Split mit

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

Andere Tipps

So etwas wie das?

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

Eine kleine Änderung könnte sein:

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

Ganz einfach:

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

Dies wird nur die Stunden oder Minuten angezeigt, wenn es welche gibt, und fügt eine „und“ vor den Sekunden, wenn es Stunden, Minuten oder beides angezeigt werden soll. Wenn Sie wirklich Lust bekommen möchten, können Sie einen Code hinzufügen „Stunde“ vs. „Stunden“, wie angemessen, dito für Minuten und Sekunden angezeigt werden.

Warum mit regex oder explodiert stören, wenn PHP-Griffen Zeit ganz gut?

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

Der Vorteil ist, dass Sie die Zeit umformatieren können Sie jedoch (einschließlich am / pm, Anpassungen für die Zeitzone, Addition / Subtraktion, etc.) mögen.

Heres eine andere Art und Weise, mit unterschiedlichen Funktionen, die für Anfänger Schritt offener und ein weiterer Schritt ist. es übernimmt auch die 1 Stunde und viele Stunden ... Sie versuchen, die gleiche Logik verwenden können die 0 Minuten und 0 Sekunden zu behandeln.

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

?>

Ich werde mit einem anderen Ansatz des Problems antworten. Mein Ansatz ist es, die Längen in Sekunden zu speichern. Dann den je nach Bedarf, ist es leicht, diese Sekunden als hh zu machen: mm: ss durch die Verwendung:

print gmdate($seconds >= 3600 ? 'H:i:s' : 'i:s', $seconds); (für Ihre Frage)

oder auf der Länge in einer Datenbank suchen:

SELECT * FROM videos WHERE length > 300; zum Beispiel für Video mit einer Länge von mehr als 5 Minuten zu suchen.

Wenn Sie wirklich eine eingebaute Funktion verwenden möchten, vielleicht für Robustheit, können Sie versuchen

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

und verwenden Sie einen der Datumsformatierungsfunktionen (date(), strftime(), etc.), um die Zeit in irgendeiner Weise zu formatieren Sie es wünschen. Oder Sie können die Ausgabe von strptime($hms,'%T') verwenden. Entweder kann für das einfache Szenario Sie haben zu viel des Guten.

explode () ist für Stiefmütterchen. Dies ist ein Job für regulären Ausdrücken !

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

Völlig ungetestet, aber so etwas wie das funktionieren soll. Beachten Sie, dass dieser Code geht davon aus, dass die Stunde Fragment immer zweistellig sein (beispielsweise ein Drei-Stunden-Video würde statt 03:00:00 3:00:00 werden).

EDIT: Im Nachhinein mit regulären Ausdrücken dafür ist wahrscheinlich ein Fall von Over-Engineering; explode () genauso gut die Arbeit machen und wahrscheinlich sogar schneller in diesem Fall. Aber es war die erste Methode in den Sinn zu kommen, wenn ich die Frage zu lesen.

Konvertieren von 00:00:00 Stunden, Minuten und Sekunden in PHP ist wirklich einfach.

$ Stunden = 0; $ Minuten = 0; $ Sekunden = 0;

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top