Sin embargo, es mejor asegurarse de que la cantidad de segundos sea inferior a 86,400.
salathe
12
H representa la cantidad de horas en un solo día. Entonces, si tiene 90000 segundos y usará H, el resultado será 01 (primera hora del día siguiente). NO 25: solo hay 24 horas en un día.
MarcinWolny
77
No estoy seguro de que esta sea la respuesta correcta, esto producirá un datetime... así que si esperamos resultados> 24 horas no funcionará. Además, si necesitamos algún resultado negativo (por ejemplo, trabajar con desplazamiento) no funcionará. -1para la alondra de los detalles
WonderLand 01 de
54
Esta no debería ser la respuesta aceptada debido a la falla obvia para tiempos que son mayores de 24 horas.
Scott Flack el
10
Para usar con días en los que los números pueden ser mayores que 85399, puede usar echo gmdate("z H:i:s", 685);z es la cantidad de días en el año que comienza con 0. Obviamente, puede revisar el manual de fecha php para satisfacer sus necesidades específicas.
Nightwolf
177
Una hora es 3600 segundos, un minuto es 60 segundos, entonces ¿por qué no?
Buena respuesta, pero asegúrese de restar $ horas * 3600 y $ minutos * 60 de $ init entre cada operación; de lo contrario, terminará contando dos minutos y segundos.
Mike Stowe
55
Para agregar al comentario de @ Amber, use sprintfpara devolver el valor en lugar de imprimirlo.
Allen Butler
77
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
No funciona para valores negativos. Si tiene un intervalo de segundos negativo, use esto:return ($t< 0 ? '-' : '') . sprintf("%02d%s%02d%s%02d", floor(abs($t)/3600), $f, (abs($t)/60)%60, $f, abs($t)%60); }
Ajax
66
Use la función gmdate()solo si los segundos son menos de 86400(1 día) :
Se usan otras soluciones gmdate, pero fallan en casos extremos donde tiene más de 86400 segundos. Para evitar esto, simplemente podemos calcular el número de horas nosotros mismos, luego dejar que gmdatelos segundos restantes se calculen en minutos / segundos.
No estoy completamente seguro, pero estoy bastante seguro de que está ajustando el tiempo a 0 y luego cualquier cosa además de eso sería la respuesta correcta
@barfoon: es cierto, pero creo que esto es lo que M.Ezz estaba pidiendo, y es un estándar utilizado a tiempo. Esto se ve extraño por mi experiencia "3: 7: 5" en lugar de "03:07:05", o incluso "3: 7", me parece más una relación.
Kerry Jones
3
La función gmtdate () no funcionó para mí, ya que estaba rastreando las horas trabajadas en un proyecto y si son más de 24 horas, se obtiene la cantidad restante después de que se restan 24 horas. En otras palabras, 37 horas se convierten en 13 horas. (todo como lo indicó Glavic anteriormente, ¡gracias por sus ejemplos!) Este funcionó bien:
Este código evita en la medida de lo posible las tediosas llamadas a funciones y la construcció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 a la izquierda durante minutos y segundos, siempre que otro componente de tiempo distinto de cero los preceda.
Y omite todos los componentes principales 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".
Si desea que el código sea aún más corto (pero menos legible), puede evitar la $convertedmatriz y, en su lugar, colocar los valores directamente en la llamada sprintf (), de la siguiente manera:
La duración debe ser 0 o superior en las dos piezas de código anteriores. Las duraciones negativas no son compatibles. Pero puede manejar duraciones negativas usando el siguiente código alternativo:
Tenga en cuenta que el gmdate()truco es incluso más corto que esto, pero solo admite duraciones de hasta 24 horas. ¡Cualquier cosa superior a 24 horas fallará si usa el truco gmdate!
$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;
Si necesita hacer eso en javascript, puede hacerlo en una sola línea de código como se respondió aquí Convierta segundos a HH-MM-SS con JavaScript . Reemplace SEGUNDOS con lo que desea convertir.
var time =newDate(SECONDS *1000).toISOString().substr(11,8);
En caso de que alguien más esté buscando una función simple para devolver este formato agradable (sé que no es el formato que solicitó el OP), esto es lo que acabo de inventar. Gracias a @mughal por el código en el que se basó.
seconds
a unadate/time
cantidad de horas: minutos: segundos?Respuestas:
Puedes usar la
gmdate()
función:fuente
datetime
... así que si esperamos resultados> 24 horas no funcionará. Además, si necesitamos algún resultado negativo (por ejemplo, trabajar con desplazamiento) no funcionará.-1
para la alondra de los detallesecho gmdate("z H:i:s", 685);
z es la cantidad de días en el año que comienza con 0. Obviamente, puede revisar el manual de fecha php para satisfacer sus necesidades específicas.Una hora es 3600 segundos, un minuto es 60 segundos, entonces ¿por qué no?
que produce:
(No he probado tanto, por lo que puede haber errores con el piso más o menos)
fuente
printf("%02d:%02d:%02d", $hours, $minutes, $seconds);
sprintf
para devolver el valor en lugar de imprimirlo.aqui tienes
fuente
return ($t< 0 ? '-' : '') . sprintf("%02d%s%02d%s%02d", floor(abs($t)/3600), $f, (abs($t)/60)%60, $f, abs($t)%60); }
Use la función
gmdate()
solo si los segundos son menos de86400
(1 día) :Ver: gmdate ()
Ejecute la demo
Convierta segundos a formato por 'pie' sin límite * :
Ver: floor () , sprintf () , operadores aritméticos
Ejecute la demo
Ejemplo de uso de
DateTime
extensión:Ver: DateTime :: __ construct () , DateTime :: modify () , clone , sprintf ()
Ejecute la demo
MySQL ejemplo gama del resultado se ve limitada a la del tipo de datos de tiempo, que es de
-838:59:59
a838:59:59
:Ver: SEC_TO_TIME
Ejecute la demo
Ejemplo de PostgreSQL:
Ejecute la demo
fuente
Se usan otras soluciones
gmdate
, pero fallan en casos extremos donde tiene más de 86400 segundos. Para evitar esto, simplemente podemos calcular el número de horas nosotros mismos, luego dejar quegmdate
los segundos restantes se calculen en minutos / segundos.Entrada:
6030
Salida:1:40:30
Entrada:
2000006030
Salida:555557:13:50
fuente
fuente
No dará tiempo en
H:i:s
formato sino_of_seconds
es mayor a 1 día (segundos en un día).Descuidará el valor del día y dará solo
Hour:Min:Seconds
Por ejemplo:
fuente
Aquí hay una línea que maneja los segundos negativos y más de 1 día de segundos.
Por ejemplo:
Salidas: -26: 03: 04
fuente
Si no te gustan las respuestas aceptadas o las populares, prueba esta.
fuente
función de escritura como esta para devolver una matriz
entonces simplemente llame a la función así:
la salida es
fuente
Ver:
De: Convierte segundos en días, horas, minutos y segundos
fuente
Prueba esto:
Tomado de
http://bytes.com/topic/php/answers/3917-seconds-converted-hh-mm-ss
fuente
La función gmtdate () no funcionó para mí, ya que estaba rastreando las horas trabajadas en un proyecto y si son más de 24 horas, se obtiene la cantidad restante después de que se restan 24 horas. En otras palabras, 37 horas se convierten en 13 horas. (todo como lo indicó Glavic anteriormente, ¡gracias por sus ejemplos!) Este funcionó bien:
fuente
Esta función puede ser útil, podría extenderla:
fuente
Solución de: https://gist.github.com/SteveJobzniak/c91a8e2426bac5cb9b0cbc1bdbc45e4b
¡Aquí hay un método muy limpio y corto!
Este código evita en la medida de lo posible las tediosas llamadas a funciones y la construcció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 a la izquierda durante minutos y segundos, siempre que otro componente de tiempo distinto de cero los preceda.
Y omite todos los componentes principales 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".
Si desea que el código sea aún más corto (pero menos legible), puede evitar la
$converted
matriz y, en su lugar, colocar los valores directamente en la llamada sprintf (), de la siguiente manera:La duración debe ser 0 o superior en las dos piezas de código anteriores. Las duraciones negativas no son compatibles. Pero puede manejar duraciones negativas usando el siguiente código alternativo:
fuente
gmdate()
truco es incluso más corto que esto, pero solo admite duraciones de hasta 24 horas. ¡Cualquier cosa superior a 24 horas fallará si usa el truco gmdate!Una manera simple de usar DateTime para esto es:
Es una solución simple que le brinda la posibilidad de utilizar el formato Método de fecha y hora.
fuente
En java puedes usarlo de esta manera.
fuente
fuente
Bueno, necesitaba algo que redujera los segundos a horas, minutos y segundos, pero que excedería las 24 horas y que no se redujera aún más en días.
Aquí hay una función simple que funciona. Probablemente puedas mejorarlo ... Pero aquí está:
fuente
Para convertirlo en una función:
fuente
Si necesita hacer eso en javascript, puede hacerlo en una sola línea de código como se respondió aquí Convierta segundos a HH-MM-SS con JavaScript . Reemplace SEGUNDOS con lo que desea convertir.
fuente
Si desea crear una cadena de duración de audio / video como YouTube, etc., puede hacer:
($seconds >= 60) ? ltrim(gmdate("H:i:s", $seconds), ":0") : gmdate("0:s", $seconds)
Devolverá cadenas como:
Probablemente no funcionará bien por tiempo> = 24 horas.
fuente
Esta es una bonita manera de hacer eso:
fuente
En caso de que alguien más esté buscando una función simple para devolver este formato agradable (sé que no es el formato que solicitó el OP), esto es lo que acabo de inventar. Gracias a @mughal por el código en el que se basó.
fuente
Cualquiera que busque esto en el futuro, esto le dará el formato que solicitó el póster inicial.
fuente
fuente