¿Cómo puedo convertir segundos a una HH-MM-SS
cadena usando JavaScript?
javascript
date
time
date-format
time-format
Hannoun Yassir
fuente
fuente
Respuestas:
¿No sabes datejs ? Es un deber saber.
Usando datejs, solo escribe algo como:
--actualizar
Hoy en día date.js está desactualizado y no se mantiene, así que usa " Moment.js ", que es mucho mejor como lo señala TJ Crowder.
--actualización 2
Utilice @ Frank es una solución de una línea:
Es, con mucho, la mejor solución.
fuente
TypeError: Object [object Date] has no method 'clearTime'
.Puede lograr hacer esto sin ninguna biblioteca externa de JavaScript con la ayuda del método de Fecha de JavaScript como el siguiente:
O, según el comentario de @Frank ; un trazador de líneas:
fuente
new Date(SECONDS * 1000).toISOString().substr(11, 8);
Object doesn't support property or method 'toISOString'
No creo que ninguna característica incorporada del objeto Date estándar haga esto por usted de una manera que sea más conveniente que simplemente hacer los cálculos usted mismo.
Ejemplo:
Mostrar fragmento de código
fuente
0.05
en lahours
variable. Lo puse dentro de unoparseInt
que lo arregló para mi caso, pero no creo que eso sea exacto para todo. Aún así, esto me ayudó, ¡así que gracias!parseInt
, es para analizar cadenas , no manipular números.Math.floor
sería la operación relevante aquí.seconds = Math.floor(totalSeconds % 60);
. También obtuve un resultado decimal allí también.totalSeconds % 60
solo puede tener una porción fraccional sitotalSeconds
tiene una porción fraccionaria. Si desea piso, dependerá de si desea perder esa información o retenerla. (Las otras operaciones de piso que estamos haciendo no pierden ninguna información, porque solo están borrando los datos que terminarán enminutes
yseconds
.)console.log( hours +':'+ ('0'+minutes).slice(-2) +':'+ ('0'+seconds).slice(-2) );
Sé que esto es un poco viejo, pero ...
ES2015:
Producirá:
fuente
Como Cleiton señaló en su respuesta , moment.js puede usarse para esto:
fuente
moment().startOf('year').seconds(30000000).format('DDD HH:mm:ss')
..format('YYYY DDD HH:mm:ss')
fuente
Esto hace el truco:
(Procedente de aquí )
fuente
podemos hacer que esta función sea mucho más corta y nítida, pero eso disminuye la legibilidad, por lo que la escribiremos de la manera más simple y estable posible.
o puedes comprobar esto trabajando aquí :
fuente
Prueba esto:
fuente
Aquí hay una extensión de la clase Number. toHHMMSS () convierte segundos en una cadena hh: mm: ss.
fuente
Versión fácil de seguir para novatos:
fuente
Esta función debería hacerlo:
Sin pasar un separador, se usa
:
como separador (predeterminado):Si desea usarlo
-
como separador, simplemente páselo como el segundo parámetro:Ver también este violín .
fuente
:
como predeterminada para elseparator
parámetro, como ya expliqué. Esto se hace mediante la declaracióntypeof separator !== 'undefined' ? separator : ':'
. Además, su función es bastante idéntica a la mía, salvo algunos cambios cosméticos y ambos deberían producir el mismo resultado ... excepto que mi versión tiene un soporte de navegador mucho mejor. La suya no funcionará en CUALQUIER versión de Internet Explorer o MS Edge <14.a continuación se muestra el código que convertirá los segundos al formato hh-mm-ss:
Obtenga un método alternativo de Convertir segundos al formato HH-MM-SS en JavaScript
fuente
Para el caso especial de HH: MM: SS.MS (eq: "00: 04: 33.637") utilizado por FFMPEG para especificar milisegundos .
Ejemplo de uso, un temporizador de transporte de milisegundos:
Ejemplo de uso, vinculado a un elemento multimedia
Fuera de la pregunta, esas funciones escritas en php:
fuente
+ "." + p.getMilliseconds()
simplemente usandonew Date(p.getTime()-o.getTime()).toISOString().split("T")[1].split("Z")[0]
fuente
Solo quería dar una pequeña explicación a la buena respuesta anterior:
En la segunda línea, dado que hay 3600 segundos en 1 hora, dividimos el número total de segundos entre 3600 para obtener el número total de horas. Usamos parseInt para quitar cualquier decimal. Si totalSec fuera 12600 (3 horas y media), parseInt (totalSec / 3600) devolvería 3, ya que tendremos 3 horas completas. ¿Por qué necesitamos el% 24 en este caso? Si superamos las 24 horas, digamos que tenemos 25 horas (90000 segundos), entonces el módulo aquí nos llevará nuevamente a 1, en lugar de regresar a 25. Está limitando el resultado dentro de un límite de 24 horas, ya que hay 24 horas En un día.
Cuando ves algo como esto:
Piensa en esto, de esta manera:
fuente
Coincidiendo con este viejo hilo, el OP declaró HH: MM: SS, y muchas de las soluciones funcionan, hasta que te das cuenta de que necesitas más de 24 horas en la lista. Y tal vez no desee más que una sola línea de código. Aqui tienes:
Devuelve H +: MM: SS. Para usarlo, simplemente use:
... Traté de que usara la menor cantidad de código posible, para un enfoque agradable de una sola línea.
fuente
¿Has intentado agregar segundos a un objeto Date?
Una muestra: https://jsfiddle.net/j5g2p0dc/5/
Actualizado: faltaba un enlace de muestra, así que creé uno nuevo.
fuente
addSeconds
en el objeto Fecha comoDate.prototype.addSeconds = function(seconds){...}
. Sí, funciona, gracias por la actualización.Aquí hay una función para convertir segundos a formato hh-mm-ss según la respuesta de powtac aquí
jsfiddle
Ejemplo de uso
fuente
Después de mirar todas las respuestas y no estar contento con la mayoría de ellas, esto es lo que se me ocurrió. Sé que llego muy tarde a la conversación, pero aquí está de todos modos.
Creo un nuevo objeto Fecha, cambio la hora a mis parámetros, convierto el Objeto Fecha en una cadena de tiempo y elimino las cosas adicionales dividiendo la cadena y devolviendo solo la parte que necesita.
Pensé en compartir este enfoque, ya que elimina la necesidad de expresiones regulares, lógica y acrobacias matemáticas para obtener los resultados en formato "HH: mm: ss", y en su lugar se basa en métodos integrados.
Puede consultar la documentación aquí: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date
fuente
Hay muchas opciones para resolver este problema, y obviamente hay una buena opción sugerida, pero quiero agregar un código optimizado más aquí
si no desea formato cero con menos de 10 números, puede usar
}
Código de muestra http://fiddly.org/1c476/1
fuente
En una línea, usando la solución de TJ Crowder:
En una línea, otra solución que también cuenta días:
Fuente: https://gist.github.com/martinbean/2bf88c446be8048814cf02b2641ba276
fuente
fuente
También puede usar el siguiente código:
fuente
new Date().toString().split(" ")[4];
resultado
15:08:03
fuente
Para cualquiera que use AngularJS, una solución simple es filtrar el valor con la API de fecha , que convierte milisegundos en una cadena según el formato solicitado. Ejemplo:
Tenga en cuenta que esto espera milisegundos, por lo que es posible que desee multiplicar el tiempo restante por 1000 si está convirtiendo desde segundos (como se formuló la pregunta original).
fuente
Me encontré con el caso que algunos han mencionado donde el número de segundos es más de un día. Aquí hay una versión adaptada de la respuesta mejor calificada de @Harish Anchu que representa períodos más largos de tiempo:
Ejemplo:
fuente
Ejemplo de uso
fuente
Ninguna de las respuestas aquí satisface mis requisitos, ya que quiero poder manejar
Aunque el OP no los requiere, es una buena práctica cubrir casos extremos, especialmente cuando requiere poco esfuerzo.
Es bastante obvio que el OP significa un NÚMERO de segundos cuando dice segundos . ¿Por qué vincularía tu función
String
?fuente
secondsToTimeSpan(8991)
retornos6.00:05:51
mientras que creo que debería volver00:02:29:51
He usado este código antes para crear un objeto de intervalo de tiempo simple:
fuente