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
Prueba esto:
date("H:i:s",-57600 + 685);
Tomado de
http://bytes.com/topic/php/answers/3917-seconds-converted-hh-mm-ss
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()
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
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()
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
Ejemplo de PostgreSQL:
SELECT TO_CHAR(''8525 second''::interval, ''HH24:MI:SS'');
# 02:22:05
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