Ich muss Sekunden in "Stunde:Minute:Sekunde" umrechnen.
Zum Beispiel: "685" umgewandelt in "00:11:25"
Wie kann ich das erreichen?
Ich muss Sekunden in "Stunde:Minute:Sekunde" umrechnen.
Zum Beispiel: "685" umgewandelt in "00:11:25"
Wie kann ich das erreichen?
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
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"
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.
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.
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.