Quiero convertir una duración de tiempo, es decir, número de segundos a una cadena de tiempo separada por dos puntos (hh: mm: ss)
Encontré algunas respuestas útiles aquí, pero todas hablan sobre la conversión al formato x horas yx minutos.
Entonces, ¿hay un pequeño fragmento que haga esto en jQuery o simplemente JavaScript sin formato?
Respuestas:
Puedes usarlo ahora como:
Fragmento de trabajo:
Mostrar fragmento de código
fuente
Puede lograr esto sin ninguna biblioteca JS externa con la ayuda del método JS Date, como se muestra a continuación:
fuente
new Date(1000 * seconds).toISOString().substr(11, 8)
..replace(/^[0:]+/, "")
aftersubstr
para eliminar todos los ceros y:
desde el inicio de la cadena.Para obtener la parte de tiempo en el formato
hh:MM:ss
, puede usar esta expresión regular:(Esto fue mencionado anteriormente en la misma publicación por alguien, gracias por eso).
fuente
var myDate = new Date().toTimeString().replace(/.*(\d{2}:\d{2})(:\d{2}).*/, "$1");
replace
es confuso. ¿Por qué no usarnew Date(null, null, null, null, null, timeInSeconds).toTimeString().match(/\d{2}:\d{2}:\d{2}/)[0]
?new Date().toTimeString().split(" ")[0]
Recomiendo javascript ordinario, usando el objeto Date:
(Por supuesto, el objeto Fecha creado tendrá una fecha real asociada, pero esos datos son extraños, por lo que para estos fines, no tiene que preocuparse por eso).
fuente
date.getUTCHours()
ydate.getUTCMinutes()
.Una búsqueda en Google arrojó este resultado :
fuente
secondsToTime(119.9)
=>Object {h: 0, m: 1, s: 60}
. Para solucionar esto, agreguesecs = Math.round(secs);
al principio del método. Por supuesto, vimos este error durante la demostración ...Variación sobre un tema. Maneja los segundos de un solo dígito un poco diferente
fuente
Aquí está mi opinión al respecto:
Resultados previstos:
fuente
const formatTime = (seconds, h = Math.floor(seconds / 3600), m = Math.floor((seconds % 3600) / 60), s = seconds % 60) => [h, m > 9 ? m : '0' + m, s > 9 ? s : '0' + s].filter(s => s).join(':');
second
argumentos. Encuentro mi versión más clara incluso si es un poco más detallada.seconds: number
escriba anotaciones, en es6?const s = Math.round(seconds % 60);
Me gusta la primera respuesta Hay algunas optimizaciones:
Los datos de origen son un número. No se necesitan cálculos adicionales.
exceso de computación
Código de resultado:
fuente
Number
es correcto porqueseconds
es, de hecho, un número. debe convertir de una cadena antes de usar esta función, que es lo correcto.Usando la increíble biblioteca moment.js :
Esto le permite especificar cualquier duración, ya sea horas, minutos, segundos, molinos, y devuelve una versión legible para humanos.
fuente
fuente
new Date().toString().split(" ")[4];
resultado
15:08:03
fuente
new Date(new Date().getTime() - startTime).toUTCString().split(" ")[4]
dondestartTime
se configuró previamentestartTime = new Date().getTime();
. (Tuve que usarlotoUTCString()
porque de lo contrario los tiempos estaban fuera de una hora).Es bastante fácil
fuente
resultado:
fuente
La respuesta de Webjins me gustó más, así que la extendí para mostrar días con sufijo de anuncio, hice que la visualización sea condicional e incluida como sufijo en segundos:
devuelve "3d 16:32:12" o "16:32:12" o "32:12" o "12s"
fuente
Me encantó la respuesta de Powtac, pero quería usarla en angular.js, así que creé un filtro usando su código.
Es funcionalmente idéntico, excepto que agregué un campo de decimales opcional para mostrar segundos fraccionarios. Úselo como lo haría con cualquier otro filtro:
{{ elapsedTime | HHMMSS }}
muestra:01:23:45
{{ elapsedTime | HHMMSS : 3 }}
muestra:01:23:45.678
fuente
Creo que en cuanto al rendimiento, este es, con mucho, el más rápido:
fuente
Ejemplos
fuente
Math.floor()
segundo en los segundos, ya que podrían darse en decimales. (Pasó conmigo.)Aquí hay otra versión, que también maneja días:
fuente
Se puede usar una expresión regular para hacer coincidir la subcadena de tiempo en la cadena devuelta por el
toString()
método del objeto Fecha, que tiene el siguiente formato: "Jue 05 de julio de 2012 02:45:12 GMT + 0100 (hora diurna GMT)". Tenga en cuenta que esta solución utiliza el tiempo transcurrido desde la época: la medianoche del 1 de enero de 1970. Esta solución puede ser de una sola línea, aunque dividirla hace que sea mucho más fácil de entender.fuente
Así es como lo hice. Parece funcionar bastante bien, y es extremadamente compacto. (Sin embargo, utiliza muchos operadores ternarios)
... y para formatear cadenas ...
fuente
Puede usar la siguiente función para convertir el tiempo (en segundos) al
HH:MM:SS
formato:Sin pasar un separador, se usa
:
como separador (predeterminado):Si desea usarlo
-
como separador, simplemente páselo como el segundo parámetro:Manifestación
Ver también este violín .
fuente
Hay un nuevo método para cadenas en el bloque: padStart
Aquí hay un caso de uso de muestra: duraciones de YouTube en 4 líneas de JavaScript
fuente
Así es como lo hice
timeFromSecs (22341938) devolverá '258d 14h 5m 38s'
fuente
Personalmente, prefiero la unidad principal (días, horas, minutos) sin ceros iniciales. Pero los segundos siempre deben estar encabezados por minutos (0:13), esta presentación se considera fácilmente como 'duración', sin más explicaciones (marcado como min, sec (s), etc.), utilizable en varios idiomas (internacionalización).
// imitando el formato de duración del lado del servidor (.net, C #) como:
fuente
Puede usar Momement.js con el complemento de formato momento-duración :
Ver también este violín
fuente
donde el parámetro de configuración regional ("en", "de", etc.) es opcional
fuente
fuente
Aquí hay una línea actualizada para 2019:
fuente
Date
objeto.¡Aquí hay una solución bastante simple que se redondea al segundo más cercano!
fuente
Este es uno que escribí recientemente para MM: SS. No es exacto a la pregunta, pero es un formato de una línea diferente.
Editar: Esto se agregó por variedad, pero la mejor solución aquí es https://stackoverflow.com/a/25279399/639679 a continuación.
fuente