398 Stimmen

Sekunden umrechnen in Stunde:Minute:Sekunde

Ich muss Sekunden in "Stunde:Minute:Sekunde" umrechnen.

Zum Beispiel: "685" umgewandelt in "00:11:25"

Wie kann ich das erreichen?

2voto

Honk der Hase Punkte 2122

Ich weiß nicht, warum dies noch nicht vorgeschlagen wurde, aber hier ist eine Variante, die DateInterval was den Vorteil hat, dass Sekunden > 86400 kein Problem sind (erwarten Sie nur nicht, dass die Stunden < 24 sind)

Bemerkenswert: Die Funktion gibt die DateInterval Objekt, daher ist das Ausgabeformat dem Aufrufer überlassen

function seconds2interval($seconds) {
    $s = intval($seconds);
    $hrs = floor($s / 3600);
    $min = floor(($s - ($hrs * 3600)) / 60);
    $sec = $s % 60;

    $duration = sprintf('PT%dH%dM%dS', $hrs, $min, $sec);
    $d = new DateInterval($duration);

    return $d;
}

$d = seconds2interval(93837.3113);  
echo $d->format('%H:%I:%s'); // 26:03:57

2voto

gw0 Punkte 2504

Lösung von: https://gist.github.com/SteveJobzniak/c91a8e2426bac5cb9b0cbc1bdbc45e4b

Dieser Code vermeidet die mühsamen Funktionsaufrufe und den stückweisen Aufbau von Zeichenketten so weit wie möglich, und die großen und sperrigen Funktionen, die die Leute dafür machen.

Sie gibt eine Ausgabe im Format "1h05m00s" zurück und verwendet führende Nullen für Minuten und Sekunden, sofern eine weitere Zeitkomponente, die nicht Null ist, vorausgeht.

Außerdem werden alle leeren führenden Komponenten übersprungen, um zu vermeiden, dass Sie nutzlose Informationen wie "0h00m01s" erhalten (stattdessen wird "1s" angezeigt).

Beispielhafte Ergebnisse: "1s", "1m00s", "19m08s", "1h00m00s", "4h08m39s".

$duration = 1; // values 0 and higher are supported!
$converted = [
    'hours' => floor( $duration / 3600 ),
    'minutes' => floor( ( $duration / 60 ) % 60 ),
    'seconds' => ( $duration % 60 )
];
$result = ltrim( sprintf( '%02dh%02dm%02ds', $converted['hours'], $converted['minutes'], $converted['seconds'] ), '0hm' );
if( $result == 's' ) { $result = '0s'; }

Wenn Sie den Code noch kürzer (aber weniger lesbar) machen wollen, können Sie die $converted Array und geben Sie die Werte stattdessen direkt in den sprintf()-Aufruf ein, wie folgt:

$duration = 1; // values 0 and higher are supported!
$result = ltrim( sprintf( '%02dh%02dm%02ds', floor( $duration / 3600 ), floor( ( $duration / 60 ) % 60 ), ( $duration % 60 ) ), '0hm' );
if( $result == 's' ) { $result = '0s'; }

Die Dauer muss 0 oder höher sein in beide der obigen Codestücke. Negative Dauern werden nicht unterstützt. Sie können jedoch negative Dauern behandeln, indem Sie stattdessen den folgenden alternativen Code verwenden:

$duration = -493; // negative values are supported!
$wasNegative = FALSE;
if( $duration < 0 ) { $wasNegative = TRUE; $duration = abs( $duration ); }
$converted = [
    'hours' => floor( $duration / 3600 ),
    'minutes' => floor( ( $duration / 60 ) % 60 ),
    'seconds' => ( $duration % 60 )
];
$result = ltrim( sprintf( '%02dh%02dm%02ds', $converted['hours'], $converted['minutes'], $converted['seconds'] ), '0hm' );
if( $result == 's' ) { $result = '0s'; }
if( $wasNegative ) { $result = "-{$result}"; }
// $result is now "-8m13s"

1voto

predkony Punkte 101

Eine einfache Möglichkeit, DateTime dafür zu verwenden, ist:

    $time = 60; //sec.
    $now = time();
    $rep = new DateTime('@'.$now);
    $diff = new DateTime('@'.($now+$time));
    $return = $diff->diff($rep)->format($format);

    //output:  01:04:65

Es ist eine einfache Lösung, die Ihnen die Möglichkeit gibt, die Formatmethode von DateTime zu verwenden.

1voto

Keith Turkowski Punkte 647

Wenn Sie eine Audio-/Videodauerzeichenfolge wie bei YouTube usw. erstellen möchten, können Sie dies tun:

($seconds >= 60) ? ltrim(gmdate("H:i:s", $seconds), ":0") : gmdate("0:s", $seconds)

Gibt Zeichenketten wie zurück:

55.55 => '0:55'
100   => '1:40'

Bei einer Zeitspanne von mehr als 24 Stunden wird dies wahrscheinlich nicht funktionieren.

0voto

Pamirzameen Punkte 109

Die folgenden Codes können die Gesamtstunden plus Minuten und Sekunden genau anzeigen

$duration_in_seconds = 86401;
if($duration_in_seconds>0)
{
    echo floor($duration_in_seconds/3600).gmdate(":i:s", $duration_in_seconds%3600);
}
else
{
    echo "00:00:00";
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X