Antworten:
Sie können die gmdate()
Funktion verwenden:
echo gmdate("H:i:s", 685);
datetime
... Wenn wir also ein Ergebnis> 24 Stunden erwarten, wird es nicht funktionieren. Auch wenn wir ein negatives Ergebnis benötigen (zum Beispiel mit Offset arbeiten), funktioniert es nicht. -1
für die Lerche der Details
echo gmdate("z H:i:s", 685);
Z ist die Anzahl der Tage im Jahr, die mit 0 beginnen. Sie können natürlich das PHP- Datumshandbuch lesen , um Ihren spezifischen Anforderungen gerecht zu werden.
Eine Stunde ist 3600 Sekunden, eine Minute ist 60 Sekunden. Warum also nicht:
<?php
$init = 685;
$hours = floor($init / 3600);
$minutes = floor(($init / 60) % 60);
$seconds = $init % 60;
echo "$hours:$minutes:$seconds";
?>
welches produziert:
$ php file.php
0:11:25
(Ich habe nicht so viel getestet, daher kann es zu Fehlern mit dem Boden oder so kommen.)
printf("%02d:%02d:%02d", $hours, $minutes, $seconds);
sprintf
zum Hinzufügen zu @ Bernsteins Kommentar, um den Wert zurückzugeben, anstatt ihn zu drucken.
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
return ($t< 0 ? '-' : '') . sprintf("%02d%s%02d%s%02d", floor(abs($t)/3600), $f, (abs($t)/60)%60, $f, abs($t)%60); }
Verwenden Sie die Funktion gmdate()
nur, wenn die Sekunden kleiner als 86400
(1 Tag) sind :
$seconds = 8525;
echo gmdate('H:i:s', $seconds);
# 02:22:05
Siehe: gmdate ()
Konvertieren Sie Sekunden in ein Format mit 'Fuß' ohne Limit * :
$seconds = 8525;
$H = floor($seconds / 3600);
$i = ($seconds / 60) % 60;
$s = $seconds % 60;
echo sprintf("%02d:%02d:%02d", $H, $i, $s);
# 02:22:05
Siehe: floor () , sprintf () , arithmetische Operatoren
Beispiel für die Verwendung der DateTime
Erweiterung:
$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
Siehe: DateTime :: __ construct () , DateTime :: modify () , clone , sprintf ()
Der MySQL-Beispielbereich des Ergebnisses ist auf den Datentyp TIME beschränkt, der von -838:59:59
bis reicht838:59:59
:
SELECT SEC_TO_TIME(8525);
# 02:22:05
Siehe: SEC_TO_TIME
PostgreSQL-Beispiel:
SELECT TO_CHAR('8525 second'::interval, 'HH24:MI:SS');
# 02:22:05
Andere Lösungen verwenden gmdate
, scheitern jedoch in Randfällen, in denen Sie mehr als 86400 Sekunden haben. Um dies zu umgehen, können wir einfach die Anzahl der Stunden selbst gmdate
berechnen und dann die verbleibenden Sekunden in Minuten / Sekunden berechnen lassen .
echo floor($seconds / 3600) . gmdate(":i:s", $seconds % 3600);
Eingabe: 6030
Ausgabe:1:40:30
Eingabe: 2000006030
Ausgabe:555557:13:50
// 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
gmdate("H:i:s", no_of_seconds);
Gibt keine Zeit im H:i:s
Format an, wenn sie no_of_seconds
größer als 1 Tag ist (Sekunden pro Tag).
Es wird den Tageswert vernachlässigen und nur gebenHour:Min:Seconds
Zum Beispiel:
gmdate("H:i:s", 89922); // returns 0:58:42 not (1 Day 0:58:42) or 24:58:42
Hier ist ein Einzeiler, der negative Sekunden und Sekunden im Wert von mehr als einem Tag verarbeitet.
sprintf("%s:%'02s:%'02s\n", intval($seconds/60/60), abs(intval(($seconds%3600) / 60)), abs($seconds%60));
Zum Beispiel:
$seconds= -24*60*60 - 2*60*60 - 3*60 - 4; // minus 1 day 2 hours 3 minutes 4 seconds
echo sprintf("%s:%'02s:%'02s\n", intval($seconds/60/60), abs(intval(($seconds%3600) / 60)), abs($seconds%60));
Ausgänge: -26: 03: 04
Schreibfunktion wie diese, um ein Array zurückzugeben
function secondsToTime($seconds) {
// extract hours
$hours = floor($seconds / (60 * 60));
// extract minutes
$divisor_for_minutes = $seconds % (60 * 60);
$minutes = floor($divisor_for_minutes / 60);
// extract the remaining seconds
$divisor_for_seconds = $divisor_for_minutes % 60;
$seconds = ceil($divisor_for_seconds);
// return the final array
$obj = array(
"h" => (int) $hours,
"m" => (int) $minutes,
"s" => (int) $seconds,
);
return $obj;
}
Rufen Sie dann einfach die Funktion folgendermaßen auf:
secondsToTime(100);
Ausgabe ist
Array ( [h] => 0 [m] => 1 [s] => 40 )
Wenn Sie akzeptierte oder beliebte Antworten nicht mögen, probieren Sie diese aus
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
Sehen:
/**
* Convert number of seconds into hours, minutes and seconds
* and return an array containing those values
*
* @param integer $inputSeconds Number of seconds to parse
* @return array
*/
function secondsToTime($inputSeconds) {
$secondsInAMinute = 60;
$secondsInAnHour = 60 * $secondsInAMinute;
$secondsInADay = 24 * $secondsInAnHour;
// extract days
$days = floor($inputSeconds / $secondsInADay);
// extract hours
$hourSeconds = $inputSeconds % $secondsInADay;
$hours = floor($hourSeconds / $secondsInAnHour);
// extract minutes
$minuteSeconds = $hourSeconds % $secondsInAnHour;
$minutes = floor($minuteSeconds / $secondsInAMinute);
// extract the remaining seconds
$remainingSeconds = $minuteSeconds % $secondsInAMinute;
$seconds = ceil($remainingSeconds);
// return the final array
$obj = array(
'd' => (int) $days,
'h' => (int) $hours,
'm' => (int) $minutes,
's' => (int) $seconds,
);
return $obj;
}
Von: Konvertieren Sie Sekunden in Tage, Stunden, Minuten und Sekunden
Versuche dies:
date("H:i:s",-57600 + 685);
Entnommen aus
http://bytes.com/topic/php/answers/3917-seconds-converted-hh-mm-ss
Die Funktion gmtdate () hat bei mir nicht funktioniert, da ich die an einem Projekt geleisteten Arbeitsstunden nachverfolgt habe. Wenn es mehr als 24 Stunden sind, wird der nach 24 Stunden verbleibende Betrag abgezogen. Mit anderen Worten, 37 Stunden werden 13 Stunden. (alles wie oben von Glavic angegeben - danke für Ihre Beispiele!) Dieser hat gut funktioniert:
Convert seconds to format by 'foot' no limit :
$seconds = 8525;
$H = floor($seconds / 3600);
$i = ($seconds / 60) % 60;
$s = $seconds % 60;
echo sprintf("%02d:%02d:%02d", $H, $i, $s);
# 02:22:05
Diese Funktion kann nützlich sein, Sie können sie erweitern:
function formatSeconds($seconds) {
if(!is_integer($seconds)) {
return FALSE;
}
$fmt = "";
$days = floor($seconds / 86400);
if($days) {
$fmt .= $days."D ";
$seconds %= 86400;
}
$hours = floor($seconds / 3600);
if($hours) {
$fmt .= str_pad($hours, 2, '0', STR_PAD_LEFT).":";
$seconds %= 3600;
}
$mins = floor($seconds / 60 );
if($mins) {
$fmt .= str_pad($mins, 2, '0', STR_PAD_LEFT).":";
$seconds %= 60;
}
$fmt .= str_pad($seconds, 2, '0', STR_PAD_LEFT);
return $fmt;}
Lösung von: https://gist.github.com/SteveJobzniak/c91a8e2426bac5cb9b0cbc1bdbc45e4b
Dieser Code vermeidet so weit wie möglich die mühsamen Funktionsaufrufe und das stückweise Erstellen von Zeichenfolgen sowie die großen und umfangreichen Funktionen, die die Leute dafür ausführen.
Es erzeugt das Format "1h05m00s" und verwendet führende Nullen für Minuten und Sekunden, solange eine andere Zeitkomponente ungleich Null vor ihnen steht.
Außerdem werden alle leeren führenden Komponenten übersprungen, um zu vermeiden, dass Sie nutzlose Informationen wie "0h00m01s" erhalten (stattdessen wird dies als "1s" angezeigt).
Beispielergebnisse: "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 möchten, können Sie das $converted
Array vermeiden und stattdessen die Werte wie folgt direkt in den Aufruf von sprintf () einfügen:
$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 in beiden obigen Codeteilen 0 oder höher sein . Negative Dauern werden nicht unterstützt. Sie können jedoch mit negativen Dauern umgehen, 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"
gmdate()
Hack noch kürzer ist, aber nur eine Dauer von bis zu 24 Stunden unterstützt. Alles über 24 Stunden schlägt fehl, wenn Sie den gmdate-Trick verwenden!
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, mit der Sie die Formatmethode von DateTime verwenden können.
In Java können Sie diesen Weg verwenden.
private String getHmaa(long seconds) {
String string;
int hours = (int) seconds / 3600;
int remainder = (int) seconds - hours * 3600;
int mins = remainder / 60;
//remainder = remainder - mins * 60;
//int secs = remainder;
if (hours < 12 && hours > 0) {
if (mins < 10) {
string = String.valueOf((hours < 10 ? "0" + hours : hours) + ":" + (mins > 0 ? "0" + mins : "0") + " AM");
} else {
string = String.valueOf((hours < 10 ? "0" + hours : hours) + ":" + (mins > 0 ? mins : "0") + " AM");
}
} else if (hours >= 12) {
if (mins < 10) {
string = String.valueOf(((hours - 12) < 10 ? "0" + (hours - 12) : ((hours - 12) == 12 ? "0" : (hours - 12))) + ":" + (mins > 0 ? "0" + mins : "0") + ((hours - 12) == 12 ? " AM" : " PM"));
} else {
string = String.valueOf(((hours - 12) < 10 ? "0" + (hours - 12) : ((hours - 12) == 12 ? "0" : (hours - 12))) + ":" + (mins > 0 ? mins : "0") + ((hours - 12) == 12 ? " AM" : " PM"));
}
} else {
if (mins < 10) {
string = String.valueOf("0" + ":" + (mins > 0 ? "0" + mins : "0") + " AM");
} else {
string = String.valueOf("0" + ":" + (mins > 0 ? mins : "0") + " AM");
}
}
return string;
}
function timeToSecond($time){
$time_parts=explode(":",$time);
$seconds= ($time_parts[0]*86400) + ($time_parts[1]*3600) + ($time_parts[2]*60) + $time_parts[3] ;
return $seconds;
}
function secondToTime($time){
$seconds = $time % 60;
$seconds<10 ? "0".$seconds : $seconds;
if($seconds<10) {
$seconds="0".$seconds;
}
$time = ($time - $seconds) / 60;
$minutes = $time % 60;
if($minutes<10) {
$minutes="0".$minutes;
}
$time = ($time - $minutes) / 60;
$hours = $time % 24;
if($hours<10) {
$hours="0".$hours;
}
$days = ($time - $hours) / 24;
if($days<10) {
$days="0".$days;
}
$time_arr = array($days,$hours,$minutes,$seconds);
return implode(":",$time_arr);
}
Nun, ich brauchte etwas, das Sekunden in Stunden, Minuten und Sekunden reduziert, aber 24 Stunden überschreitet und nicht weiter in Tage reduziert.
Hier ist eine einfache Funktion, die funktioniert. Sie können es wahrscheinlich verbessern ... Aber hier ist es:
function formatSeconds($seconds)
{
$hours = 0;$minutes = 0;
while($seconds >= 60){$seconds -= 60;$minutes++;}
while($minutes >= 60){$minutes -=60;$hours++;}
$hours = str_pad($hours, 2, '0', STR_PAD_LEFT);
$minutes = str_pad($minutes, 2, '0', STR_PAD_LEFT);
$seconds = str_pad($seconds, 2, '0', STR_PAD_LEFT);
return $hours.":".$minutes.":".$seconds;
}
$given = 685;
/*
* In case $given == 86400, gmdate( "H" ) will convert it into '00' i.e. midnight.
* We would need to take this into consideration, and so we will first
* check the ratio of the seconds i.e. $given:$number_of_sec_in_a_day
* and then after multiplying it by the number of hours in a day (24), we
* will just use "floor" to get the number of hours as the rest would
* be the minutes and seconds anyways.
*
* We can also have minutes and seconds combined in one variable,
* e.g. $min_sec = gmdate( "i:s", $given );
* But for versatility sake, I have taken them separately.
*/
$hours = ( $given > 86399 ) ? '0'.floor( ( $given / 86400 ) * 24 )-gmdate( "H", $given ) : gmdate("H", $given );
$min = gmdate( "i", $given );
$sec = gmdate( "s", $given );
echo $formatted_string = $hours.':'.$min.':'.$sec;
So konvertieren Sie es in eine Funktion:
function getHoursFormat( $given ){
$hours = ( $given > 86399 ) ? '0'.floor( ( $given / 86400 ) * 24 )-gmdate( "H", $given ) : gmdate("H", $given );
$min = gmdate( "i", $given );
$sec = gmdate( "s", $given );
$formatted_string = $hours.':'.$min.':'.$sec;
return $formatted_string;
}
Wenn Sie dies in Javascript tun müssen, können Sie dies in nur einer Codezeile tun, wie hier beantwortet. Konvertieren Sie Sekunden mit JavaScript in HH-MM-SS . Ersetzen Sie SEKUNDEN durch das, was Sie konvertieren möchten.
var time = new Date(SECONDS * 1000).toISOString().substr(11, 8);
Wenn Sie eine Audio- / Videodauer wie YouTube usw. erstellen möchten, haben Sie folgende Möglichkeiten:
($seconds >= 60) ? ltrim(gmdate("H:i:s", $seconds), ":0") : gmdate("0:s", $seconds)
Gibt Zeichenfolgen zurück wie:
55.55 => '0:55'
100 => '1:40'
Funktioniert wahrscheinlich nicht gut für die Zeit> = 24 Stunden.
Dies ist ein hübscher Weg, um das zu tun:
function time_converter($sec_time, $format='h:m:s'){
$hour = intval($sec_time / 3600) >= 10 ? intval($sec_time / 3600) : '0'.intval($sec_time / 3600);
$minute = intval(($sec_time % 3600) / 60) >= 10 ? intval(($sec_time % 3600) / 60) : '0'.intval(($sec_time % 3600) / 60);
$sec = intval(($sec_time % 3600) % 60) >= 10 ? intval(($sec_time % 3600) % 60) : '0'.intval(($sec_time % 3600) % 60);
$format = str_replace('h', $hour, $format);
$format = str_replace('m', $minute, $format);
$format = str_replace('s', $sec, $format);
return $format;
}
Nur für den Fall, dass jemand anderes nach einer einfachen Funktion sucht, um dieses gut formatierte Format zurückzugeben (ich weiß, dass es nicht das Format ist, nach dem das OP gefragt hat), habe ich mir das gerade ausgedacht. Vielen Dank an @mughal für den Code, auf dem dieser basiert.
function format_timer_result($time_in_seconds){
$time_in_seconds = ceil($time_in_seconds);
// Check for 0
if ($time_in_seconds == 0){
return 'Less than a second';
}
// Days
$days = floor($time_in_seconds / (60 * 60 * 24));
$time_in_seconds -= $days * (60 * 60 * 24);
// Hours
$hours = floor($time_in_seconds / (60 * 60));
$time_in_seconds -= $hours * (60 * 60);
// Minutes
$minutes = floor($time_in_seconds / 60);
$time_in_seconds -= $minutes * 60;
// Seconds
$seconds = floor($time_in_seconds);
// Format for return
$return = '';
if ($days > 0){
$return .= $days . ' day' . ($days == 1 ? '' : 's'). ' ';
}
if ($hours > 0){
$return .= $hours . ' hour' . ($hours == 1 ? '' : 's') . ' ';
}
if ($minutes > 0){
$return .= $minutes . ' minute' . ($minutes == 1 ? '' : 's') . ' ';
}
if ($seconds > 0){
$return .= $seconds . ' second' . ($seconds == 1 ? '' : 's') . ' ';
}
$return = trim($return);
return $return;
}
Wer dies in Zukunft sucht, gibt dem Format das gewünschte Erstplakat.
$init = 685;
$hours = floor($init / 3600);
$hrlength=strlen($hours);
if ($hrlength==1) {$hrs="0".$hours;}
else {$hrs=$hours;}
$minutes = floor(($init / 60) % 60);
$minlength=strlen($minutes);
if ($minlength==1) {$mins="0".$minutes;}
else {$mins=$minutes;}
$seconds = $init % 60;
$seclength=strlen($seconds);
if ($seclength==1) {$secs="0".$seconds;}
else {$secs=$seconds;}
echo "$hrs:$mins:$secs";
<?php
$time=3*3600 + 30*60;
$year=floor($time/(365*24*60*60));
$time-=$year*(365*24*60*60);
$month=floor($time/(30*24*60*60));
$time-=$month*(30*24*60*60);
$day=floor($time/(24*60*60));
$time-=$day*(24*60*60);
$hour=floor($time/(60*60));
$time-=$hour*(60*60);
$minute=floor($time/(60));
$time-=$minute*(60);
$second=floor($time);
$time-=$second;
if($year>0){
echo $year." year, ";
}
if($month>0){
echo $month." month, ";
}
if($day>0){
echo $day." day, ";
}
if($hour>0){
echo $hour." hour, ";
}
if($minute>0){
echo $minute." minute, ";
}
if($second>0){
echo $second." second, ";
}
seconds
in einedate/time
oder in eine Anzahl von Stunden umwandeln : Minute: Sekunden?