Ich muss Sekunden in “Stunde:Minute:Sekunde” umwandeln.
Zum Beispiel: „685“ umgewandelt in „00:11:25“
Wie kann ich das erreichen?
EzzDev
Ich muss Sekunden in “Stunde:Minute:Sekunde” umwandeln.
Zum Beispiel: „685“ umgewandelt in „00:11:25“
Wie kann ich das erreichen?
Du kannst den … benutzen gmdate()
Funktion:
echo gmdate("H:i:s", 685);
Stellen Sie jedoch besser sicher, dass die Anzahl der Sekunden unter 86.400 liegt.
– Salat
3. Juli 2010 um 19:15 Uhr
H steht für die Anzahl der Stunden an einem einzigen Tag. Wenn Sie also 90000 Sekunden haben und H verwenden, ist das Ergebnis 01 (erste Stunde eines nächsten Tages). NOT 25 – ein Tag hat nur 24 Stunden.
– Marcin Wolny
20. Juni 2013 um 10:35 Uhr
Ich bin mir nicht sicher, ob dies die richtige Antwort ist, dies wird zu einem führen datetime
… also wenn wir ein Ergebnis > 24 Stunden erwarten, wird es nicht funktionieren. Auch wenn wir ein negatives Ergebnis benötigen (zum Beispiel mit Offset arbeiten), wird es nicht funktionieren. -1
für die vielen Details
– Wunderland
1. Juli 2014 um 11:38 Uhr
Dies sollte aufgrund des offensichtlichen Fehlers für Zeiten von mehr als 24 Stunden nicht die akzeptierte Antwort sein.
– Scott Flack
3. September 2014 um 5:23 Uhr
Für die Verwendung mit Tagen, an denen Zahlen möglicherweise größer als 85399 sind, können Sie verwenden echo gmdate("z H:i:s", 685);
z ist die Anzahl der Tage im Jahr, beginnend mit 0. Sie können natürlich das PHP-Datumshandbuch lesen, um es an Ihre speziellen Bedürfnisse anzupassen.
– Nachtwolf
11. August 2016 um 6:51 Uhr
Eine Stunde hat 3600 Sekunden, eine Minute 60 Sekunden, also warum nicht:
<?php
$init = 685;
$hours = floor($init / 3600);
$minutes = floor(($init / 60) % 60);
$seconds = $init % 60;
echo "$hours:$minutes:$seconds";
?>
was produziert:
$ php file.php
0:11:25
(Ich habe nicht so viel getestet, daher kann es zu Fehlern mit dem Boden oder so kommen)
Aber er will zwei Nullen… “00:11:25” nicht “0:11:25”
– Animation
♦
3. Juli 2010 um 18:23 Uhr
printf("%02d:%02d:%02d", $hours, $minutes, $seconds);
– Bernstein
3. Juli 2010 um 18:26 Uhr
Gute Antwort, aber stellen Sie sicher, dass Sie $hours*3600 und $minutes*60 zwischen jeder Operation von $init subtrahieren, sonst werden Sie am Ende Minuten und Sekunden doppelt zählen.
– Mike Stowe
25. Juli 2015 um 5:07 Uhr
Um den Kommentar von @Amber zu ergänzen, verwenden Sie sprintf
um den Wert zurückzugeben, anstatt ihn zu drucken.
– Allen Butler
19. September 2016 um 18:33 Uhr
Dieser funktioniert bei mir am besten. Eine Kleinigkeit ist hinzuzufügen. Wenn Sie weniger als 10 Stunden haben, wird 3:10:59 angezeigt. Lass es so aussehen, als ob das OP 03:10:59 will. Funktioniert so $hours = floor( 2300 / 3600); return ($hours < 10 ? '0' . $hours : $hours) . gmdate(":i:s", $this->getSeconds() % 3600);
– NME New Media Entertainment
9. April 2021 um 21:56 Uhr
Bitte schön
function format_time($t,$f=":") // t = seconds, f = separator
{
return sprintf("%02d%s%02d%s%02d", floor($t/3600), $f, ($t/60)%60, $f, $t%60);
}
echo format_time(685); // 00:11:25
Funktioniert nicht bei negativen Werten. Wenn Sie ein negatives Sekundenintervall haben, verwenden Sie Folgendes: return ($t< 0 ? '-' : '') . sprintf("%02d%s%02d%s%02d", floor(abs($t)/3600), $f, (abs($t)/60)%60, $f, abs($t)%60); }
– Ajax
15. November 2013 um 10:25 Uhr
Glavic
Funktion verwenden gmdate()
nur wenn Sekunden kleiner als sind 86400
(1 Tag) :
$seconds = 8525;
echo gmdate('H:i:s', $seconds);
# 02:22:05
Sehen: gmdate()
Konvertieren Sie Sekunden in das Format von ‘Fuß’ keine Begrenzung* :
$seconds = 8525;
$H = floor($seconds / 3600);
$i = ($seconds / 60) % 60;
$s = $seconds % 60;
echo sprintf("%02d:%02d:%02d", $H, $i, $s);
# 02:22:05
Sehen: Boden(), sprintf(), Rechenzeichen
Beispielverwendung von DateTime
Verlängerung:
$seconds = 8525;
$zero = new DateTime("@0");
$offset = new DateTime("@$seconds");
$diff = $zero->diff($offset);
echo sprintf("%02d:%02d:%02d", $diff->days * 24 + $diff->h, $diff->i, $diff->s);
# 02:22:05
Sehen: DateTime::__construct(), DateTime::modify(), Klon,
sprintf()
MySQL-Beispiel Der Bereich des Ergebnisses ist auf den Datentyp TIME beschränkt, der von ist -838:59:59
zu 838:59:59
:
SELECT SEC_TO_TIME(8525);
# 02:22:05
Sehen: SEC_TO_TIME
PostgreSQL-Beispiel:
SELECT TO_CHAR('8525 second'::interval, 'HH24:MI:SS');
# 02:22:05
Radim
Andere Lösungen verwenden gmdate
, scheitern aber in Grenzfällen, in denen Sie mehr als 86400 Sekunden haben. Um dies zu umgehen, können wir die Anzahl der Stunden einfach selbst berechnen und dann lassen gmdate
Berechne die verbleibenden Sekunden in Minuten/Sekunden.
echo floor($seconds / 3600) . gmdate(":i:s", $seconds % 3600);
Eingang: 6030
Ausgabe: 1:40:30
Eingang: 2000006030
Ausgabe: 555557:13:50
Stano
// TEST
// 1 Day 6 Hours 50 Minutes 31 Seconds ~ 111031 seconds
$time = 111031; // time duration in seconds
$days = floor($time / (60 * 60 * 24));
$time -= $days * (60 * 60 * 24);
$hours = floor($time / (60 * 60));
$time -= $hours * (60 * 60);
$minutes = floor($time / 60);
$time -= $minutes * 60;
$seconds = floor($time);
$time -= $seconds;
echo "{$days}d {$hours}h {$minutes}m {$seconds}s"; // 1d 6h 50m 31s
Wenn Ihnen akzeptierte oder beliebte Antworten nicht gefallen, versuchen Sie es mit dieser
function secondsToTime($seconds_time)
{
if ($seconds_time < 24 * 60 * 60) {
return gmdate('H:i:s', $seconds_time);
} else {
$hours = floor($seconds_time / 3600);
$minutes = floor(($seconds_time - $hours * 3600) / 60);
$seconds = floor($seconds_time - ($hours * 3600) - ($minutes * 60));
return "$hours:$minutes:$seconds";
}
}
secondsToTime(108620); // 30:10:20