2010-08-20 32 views
32
  1. Mi salida está en el formato de 290.52262423327 segundos. ¿Cómo puedo cambiar esto a 00:04:51?La salida está en segundos. convertir a formato hh: mm: ss en php

  2. La misma salida que quiero mostrar en segundos y en formato HH: MM: SS, por lo que si es en segundos, quiero mostrar solo 290.52 segundos. (¿Solo dos enteros después del punto decimal)? ¿Cómo puedo hacer esto?

Estoy trabajando en php y la salida está presente en $time variable. desea cambiar este $time en $newtime con HH: MM: SS y $newsec como 290.52.

Gracias :)

+0

¿Está buscando una marca de tiempo o duración? –

+0

duplicado de ** [Convertir segundos a días, horas, minutos y segundos] (http://stackoverflow.com/a/19680778/67332) ** o ** [Convertir segundos a Hora: Minuto: Segundo] (http: //stackoverflow.com/a/20870843/67332)** –

+0

posible duplicado de [Convertir segundos a Hora: Minuto: Segundo] (http://stackoverflow.com/questions/3172332/convert-seconds-to-hourminutesegundo) – PeerBr

Respuesta

70

1)

function foo($seconds) { 
    $t = round($seconds); 
    return sprintf('%02d:%02d:%02d', ($t/3600),($t/60%60), $t%60); 
} 

echo foo('290.52262423327'), "\n"; 
echo foo('9290.52262423327'), "\n"; 
echo foo(86400+120+6), "\n"; 

grabados

00:04:51 
02:34:51 
24:02:06 

2)

echo round($time, 2); 
+0

Me encontré con algunas divisiones y funciones negativas extremas tratando de lograr lo que hizo en esa línea:) 'sprintf ('% 02d:% 02d:% 02d', ($ t/3600), ($ t/60% 60), $ t% 60)' – adrianTNT

+2

eres el hombre ... excelente solución n la más corta. .gracias –

-1
echo date('H:i:s',$time); 

echo number_format($time,2); 
+0

No funcionará para valores de tiempo> 12 horas, aunque –

+0

No funcionará para tiempos> 24 horas –

2

Prueba esto:

$time = 290.52262423327; 
echo date("h:i:s", mktime(0,0, round($time) % (24*3600))); 
3
$iSeconds = 290.52262423327; 
print date('H:i:s', mktime(0, 0, $iSeconds)); 
+0

Gracias, esto funcionó. –

+0

No funcionará para valores> 24 horas, aunque –

+0

sí, no funcionó ... Gracias por la información sobre pekka –

0

1)

$newtime = sprintf("%02d:%02d:%02d", $time/3600, $time/60 % 60, $time % 60); 

2)

$newsec = sprintf("%.2f", $time); 
6

Prueba este

echo gmdate("H:i:s", 90); 
+0

Esta solución funcionará para cualquier valor menor que el número de segundos en un día, pero se reiniciará a 00:00:00 para valores ≥ 86400. – dctucker

+0

¿alguna idea sobre cómo hacer que funcione para valores> 86400? –

0

No sé si esta es la forma más eficiente, pero si también es necesario para mostrar día, esto funciona:

function foo($seconds) { 
$t = round($seconds); 
return sprintf('%02d %02d:%02d:%02d', ($t/86400%24), ($t/3600) -(($t/86400%24)*24),($t/60%60), $t%60); 
} 
1

probar este :)

private function conversionTempsEnHms($tempsEnSecondes) 
    { 
     $h = floor($tempsEnSecondes/3600); 
     $reste_secondes = $tempsEnSecondes - $h * 3600; 

     $m = floor($reste_secondes/60); 
     $reste_secondes = $reste_secondes - $m * 60; 

     $s = round($reste_secondes, 3); 
     $s = number_format($s, 3, '.', ''); 

     $h = str_pad($h, 2, '0', STR_PAD_LEFT); 
     $m = str_pad($m, 2, '0', STR_PAD_LEFT); 
     $s = str_pad($s, 6, '0', STR_PAD_LEFT); 

     $temps = $h . ":" . $m . ":" . $s; 

     return $temps; 
    } 
Cuestiones relacionadas