segundos numero minutos horas entero convertir conversiones calcular php time

numero - convertir segundos a horas minutos y segundos php



Convertir segundos a hora: Minuto: Segundo (22)

Aquí hay un forro que maneja segundos negativos y más de 1 día de segundos.

sprintf("%s:%''02s:%''02s/n", intval($seconds/60/60), abs(intval(($seconds%3600) / 60)), abs($seconds%60));

Por ejemplo:

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

salidas: -26: 03: 04

Necesito convertir los segundos a "Hora: Minuto: Segundo".

Por ejemplo: "685" convertido a "00:11:25"

¿Cómo puedo conseguir esto?


Bueno, necesitaba algo que redujera los segundos en horas, minutos y segundos, pero que excediera las 24 horas y no se redujera más en días.

Aquí hay una función simple que funciona. Probablemente puedas mejorarlo ... Pero aquí está:

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; }


Cualquiera que busque esto en el futuro, le da al formato el póster inicial solicitado.

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


En caso de que alguien más esté buscando una función simple para devolverlo bien formateado (sé que no es el formato que solicitó el OP), esto es lo que acabo de encontrar. Gracias a @mughal por el código en que se basó.

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; }


Escribe una función como esta para devolver una matriz

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; }

entonces simplemente llama a la función así:

secondsToTime(100);

la salida es

Array ( [h] => 0 [m] => 1 [s] => 40 )


Esta función puede ser útil, podría ampliarla:

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;}


La función gmtdate () no me funcionó, ya que estaba rastreando las horas trabajadas en un proyecto y, si son más de 24 horas, la cantidad restante después de las 24 horas se resta. En otras palabras, 37 horas se convierten en 13 horas. (todo lo dicho anteriormente por Glavic - ¡gracias por sus ejemplos!) Este funcionó bien:

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


Otras soluciones utilizan gmdate , pero fallan en los casos de borde en los que tiene más de 86400 segundos. Para gmdate esto, simplemente podemos calcular la cantidad de horas que nos corresponde y luego dejar que gmdate calcule los segundos restantes en minutos / segundos.

echo floor($seconds / 3600) . gmdate(":i:s", $seconds % 3600);

Entrada: 6030 Salida: 1:40:30

Entrada: 2000006030 Salida: 555557:13:50



Puedes usar la función gmdate() :

echo gmdate("H:i:s", 685);


Qué pasa

print date(''H:i:s'', mktime(0, 0, 685, 0, 0));

sin extensiones


Si no te gusta una respuesta aceptada o popular una vez, prueba este

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


Solución de: https://gist.github.com/SteveJobzniak/c91a8e2426bac5cb9b0cbc1bdbc45e4b

¡Aquí hay un método muy limpio y corto!

Este código evita tanto como sea posible las llamadas tediosas de funciones y la creación de cadenas pieza por pieza, y las funciones grandes y voluminosas que la gente está haciendo para esto.

Produce el formato "1h05m00s" y utiliza ceros iniciales para minutos y segundos, siempre que los preceda otro componente de tiempo distinto de cero.

Y omite todos los componentes iniciales vacíos para evitar darle información inútil como "0h00m01s" (en su lugar, aparecerá como "1s").

Resultados de ejemplo: "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''; }

Si desea que el código sea aún más corto (pero menos legible), puede evitar la matriz $converted y, en su lugar, colocar los valores directamente en la llamada a sprintf (), de la siguiente manera:

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

La duración debe ser 0 o mayor en las dos piezas de código anteriores. Las duraciones negativas no son compatibles. Pero puede manejar duraciones negativas utilizando el siguiente código alternativo en su lugar:

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


Una forma sencilla de usar DateTime para esto es:

$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 una solución simple que le brinda la posibilidad de utilizar el formato Método de fecha y hora.


Una hora es 3600 seg, un minuto es 60 seg. ¿Por qué no?

<?php $init = 685; $hours = floor($init / 3600); $minutes = floor(($init / 60) % 60); $seconds = $init % 60; echo "$hours:$minutes:$seconds"; ?>

que produce:

$ php file.php 0:11:25

(No he probado tanto, así que podría haber errores con el piso o algo así)


Use la función gmdate() solo si los segundos son menos de 86400 (1 día) :

$seconds = 8525; echo gmdate(''H:i:s'', $seconds); # 02:22:05

Ver: gmdate()

Ejecutar la demostración

Convertir segundos a formato por ''pie'' sin límite * :

$seconds = 8525; $H = floor($seconds / 3600); $i = ($seconds / 60) % 60; $s = $seconds % 60; echo sprintf("%02d:%02d:%02d", $H, $i, $s); # 02:22:05

Ver: floor() , sprintf() , operadores aritméticos

Ejecutar la demostración

Ejemplo de uso de la extensión DateTime :

$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

Consulte: DateTime::__construct() , DateTime::modify() , clone , sprintf()

Ejecutar la demostración

El rango de ejemplo de MySQL del resultado está restringido al del tipo de datos TIME, que es de -838:59:59 a 838:59:59 :

SELECT SEC_TO_TIME(8525); # 02:22:05

Ver: SEC_TO_TIME

Ejecutar la demostración

Ejemplo de PostgreSQL:

SELECT TO_CHAR(''8525 second''::interval, ''HH24:MI:SS''); # 02:22:05

Ejecutar la demostración


Ver:

/** * 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; }

Desde: Convertir segundos en días, horas, minutos y segundos.


aqui tienes

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


// 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


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


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


gmdate("H:i:s", no_of_seconds);

No dará tiempo en H:i:s formato H:i:s si no_of_seconds es mayor que 1 día (segundos en un día).
Se descuidará el valor del día y se dará solo Hour:Min:Seconds

Por ejemplo:

gmdate("H:i:s", 89922); // returns 0:58:42 not (1 Day 0:58:42) or 24:58:42