JavaScript segundos a la cadena de tiempo con formato hh: mm: ss

300

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?

medk
fuente
11
Los puntos de referencia de algunas de las respuestas sugeridas en este hilo. jsperf.com/ms-to-hh-mm-ss-time-format
Claudijo
¿Posible duplicado de Convertir segundos a HH-MM-SS con JavaScript?
KyleMit

Respuestas:

583
String.prototype.toHHMMSS = function () {
    var sec_num = parseInt(this, 10); // don't forget the second param
    var hours   = Math.floor(sec_num / 3600);
    var minutes = Math.floor((sec_num - (hours * 3600)) / 60);
    var seconds = sec_num - (hours * 3600) - (minutes * 60);

    if (hours   < 10) {hours   = "0"+hours;}
    if (minutes < 10) {minutes = "0"+minutes;}
    if (seconds < 10) {seconds = "0"+seconds;}
    return hours+':'+minutes+':'+seconds;
}

Puedes usarlo ahora como:

alert("5678".toHHMMSS());

Fragmento de trabajo:

Powtac
fuente
1
Gracias por la idea del prototipo, me gusta cómo es más fácil llamarlo. Creé un prototipo del número para poder llamarlo también. También encontré esta respuesta que eliminaría las horas y minutos si no fueran necesarios.
alunsford3
21
use el operador "%" >> var minutes = Math.floor ((sec_num% 3600) / 60); var segundos = Math.floor (sec_num% 60);
IvanM
3
Ah gracias. No veo que funcione en ambos sentidos como una cadena hasta que llame a .toString () en el entero. puedes hacerlo funcionar al revés analizando int también
Sonic Soul
51
No coloque el prototipo, solo realice una función de utilidad.
Michael J. Calkins
15
modificar prototipo para tal cosa? 390 votos a favor? ¿seriamente?
Lukas Liesis
198

Puede lograr esto sin ninguna biblioteca JS externa con la ayuda del método JS Date, como se muestra a continuación:

var date = new Date(0);
date.setSeconds(45); // specify value for SECONDS here
var timeString = date.toISOString().substr(11, 8);
console.log(timeString)

Harish Anchu
fuente
44
¿Por qué esta respuesta es tan baja? Lo obtuve en 2011, probablemente IE 7 y 8 fue la base que no lo admitirá, pero es a finales de 2014, por lo que esta solución simple y sin complicaciones debería ser mucho más alta.
Emil Borconi
2
Desde MDN: si un parámetro que especifique está fuera del rango esperado, setSeconds () intenta actualizar la información de fecha en el objeto Fecha en consecuencia. Por ejemplo, si usa 100 por segundosValue, los minutos almacenados en el objeto Fecha se incrementarán en 1, y 40 se usarán por segundos. ¡Así que sí, se ve bien!
Andrew
41
Me gusta esta respuesta Puede ser aún más corto: new Date(1000 * seconds).toISOString().substr(11, 8).
Bohumir Zamecnik
44
Buena respuesta. Puede usar .replace(/^[0:]+/, "")after substrpara eliminar todos los ceros y :desde el inicio de la cadena.
Palo
1
Agregue esto al frente para manejar el tiempo durante 24h. parseInt (d / 86400) + "d"
Tofandel
82

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).

    var myDate = new Date().toTimeString().replace(/.*(\d{2}:\d{2}:\d{2}).*/, "$1");
    console.log(myDate)

Raj
fuente
8
+1 - Súper simple; ¡Gracias! Solo usé una variante de esto para mostrar solo los minutos y segundos:var myDate = new Date().toTimeString().replace(/.*(\d{2}:\d{2})(:\d{2}).*/, "$1");
Topher Fangio
1
no debería ser "nueva Fecha (nulo, nulo, nulo, nulo, nulo, timeInSecs) .toTimeString (). reemplazar (/.* (\ d {2}:) (\ d {2}: \ d {2 }). * /, "$ 2") "?
Obie
66
El uso de replacees confuso. ¿Por qué no usar new Date(null, null, null, null, null, timeInSeconds).toTimeString().match(/\d{2}:\d{2}:\d{2}/)[0]?
Călin Darie
44
Esto está bien para mostrar un tiempo determinado, pero tenga en cuenta que la pregunta (y otras respuestas aquí) se trata de mostrar una duración, es decir, un número determinado de segundos independientemente de la hora actual.
mahemoff
44
Versión más simple de esto:new Date().toTimeString().split(" ")[0]
Henrik N
52

Recomiendo javascript ordinario, usando el objeto Date:

var seconds = 9999;
// multiply by 1000 because Date() requires miliseconds
var date = new Date(seconds * 1000);
var hh = date.getUTCHours();
var mm = date.getUTCMinutes();
var ss = date.getSeconds();
// If you were building a timestamp instead of a duration, you would uncomment the following line to get 12-hour (not 24) time
// if (hh > 12) {hh = hh % 12;}
// These lines ensure you have two-digits
if (hh < 10) {hh = "0"+hh;}
if (mm < 10) {mm = "0"+mm;}
if (ss < 10) {ss = "0"+ss;}
// This formats your string to HH:MM:SS
var t = hh+":"+mm+":"+ss;
document.write(t);

(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).

JellicleCat
fuente
Parece que la fecha está en la zona horaria local, que en mi caso agrega 1 hora a la hora. Con segundos = 0, obtengo "01:00:00" (jue 01 de enero de 1970 01:00:00 GMT + 0100 (CET)), lo cual está mal.
mivk
3
Obtengo un resultado correcto si uso date.getUTCHours()y date.getUTCMinutes().
mivk
No entiendo por qué devuelve una marca de tiempo de 12 horas cuando le preguntó por una duración.
Nathan C. Tresch
@JellicleCat Cambió a un +1, y buen nombre.
Nathan C. Tresch
1
Me gusta esto, pero asume que la duración es inferior a 24 h
Rory
40

Una búsqueda en Google arrojó este resultado :

function secondsToTime(secs)
{
    secs = Math.round(secs);
    var hours = Math.floor(secs / (60 * 60));

    var divisor_for_minutes = secs % (60 * 60);
    var minutes = Math.floor(divisor_for_minutes / 60);

    var divisor_for_seconds = divisor_for_minutes % 60;
    var seconds = Math.ceil(divisor_for_seconds);

    var obj = {
        "h": hours,
        "m": minutes,
        "s": seconds
    };
    return obj;
}
Ash Burlaczenko
fuente
8
secondsToTime(119.9)=> Object {h: 0, m: 1, s: 60}. Para solucionar esto, agregue secs = Math.round(secs);al principio del método. Por supuesto, vimos este error durante la demostración ...
Benjamin Crouzier
29

Variación sobre un tema. Maneja los segundos de un solo dígito un poco diferente

seconds2time(0)  ->  "0s" 
seconds2time(59) -> "59s" 
seconds2time(60) -> "1:00" 
seconds2time(1000) -> "16:40" 
seconds2time(4000) -> "1:06:40"

function seconds2time (seconds) {
    var hours   = Math.floor(seconds / 3600);
    var minutes = Math.floor((seconds - (hours * 3600)) / 60);
    var seconds = seconds - (hours * 3600) - (minutes * 60);
    var time = "";

    if (hours != 0) {
      time = hours+":";
    }
    if (minutes != 0 || time !== "") {
      minutes = (minutes < 10 && time !== "") ? "0"+minutes : String(minutes);
      time += minutes+":";
    }
    if (time === "") {
      time = seconds+"s";
    }
    else {
      time += (seconds < 10) ? "0"+seconds : String(seconds);
    }
    return time;
}
jottos
fuente
Gracias por
ahorrarme
29

Aquí está mi opinión al respecto:

function formatTime(seconds) {
  const h = Math.floor(seconds / 3600);
  const m = Math.floor((seconds % 3600) / 60);
  const s = Math.round(seconds % 60);
  return [
    h,
    m > 9 ? m : (h ? '0' + m : m || '0'),
    s > 9 ? s : '0' + s
  ].filter(Boolean).join(':');
}

Resultados previstos:

const expect = require('expect');
expect(formatTime(0)).toEqual('0:00');
expect(formatTime(1)).toEqual('0:01');
expect(formatTime(599)).toEqual('9:59');
expect(formatTime(600)).toEqual('10:00');
expect(formatTime(3600)).toEqual('1:00:00');
expect(formatTime(360009)).toEqual('100:00:09');
expect(formatTime(0.2)).toEqual('0:00');
Tom Esterez
fuente
Puede escribir esto como: 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(':');
Ruben Stolk
2
@RubenStolk Me resulta un poco confuso tener una función que tome dos secondargumentos. Encuentro mi versión más clara incluso si es un poco más detallada.
Tom Esterez
seconds: numberescriba anotaciones, en es6?
Olian04
1
La coma final de @pstanton es compatible desde IE9: caniuse.com/#feat=mdn-javascript_grammar_trailing_commas . Personalmente elijo ignorar esos viejos navegadores ahora. Pero tienes razón, lo eliminé para que la respuesta sea más genérica.
Tom Esterez
1
Gran solución Tal vez solo cambie los segundos comoconst s = Math.round(seconds % 60);
Raff
16

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:

Number.prototype.toHHMMSS = function () {
    var seconds = Math.floor(this),
        hours = Math.floor(seconds / 3600);
    seconds -= hours*3600;
    var minutes = Math.floor(seconds / 60);
    seconds -= minutes*60;

    if (hours   < 10) {hours   = "0"+hours;}
    if (minutes < 10) {minutes = "0"+minutes;}
    if (seconds < 10) {seconds = "0"+seconds;}
    return hours+':'+minutes+':'+seconds;
}
Serge K.
fuente
1
Creo que esta función es una característica utilizada en el frente y por lo tanto prototipo String y no Number. Y Number siempre puede ser una cadena pero no al revés.
powtac
3
Creo que Numberes correcto porque secondses, de hecho, un número. debe convertir de una cadena antes de usar esta función, que es lo correcto.
caesarsol
2
La respuesta votada, como esta, es mala. Apuesto a que no necesitas TODOS los números para tener este método. No modifique el prototipo para cosas de utilidad aleatoria.
Lukas Liesis
o simplemente para crear un prototipo y convertirlo en una función numToHHMMSS o strTOHHMMSS
yeahdixon el
Esta solución funciona mientras que la solución elegida genera segundos de 60 para ciertos valores.
AndroidDev
14

Usando la increíble biblioteca moment.js :

function humanizeDuration(input, units ) { 
  // units is a string with possible values of y, M, w, d, h, m, s, ms
  var duration = moment().startOf('day').add(units, input),
    format = "";

  if(duration.hour() > 0){ format += "H [hours] "; }

  if(duration.minute() > 0){ format += "m [minutes] "; }

  format += " s [seconds]";

  return duration.format(format);
}

Esto le permite especificar cualquier duración, ya sea horas, minutos, segundos, molinos, y devuelve una versión legible para humanos.

Pradeep
fuente
14
function formatTime(seconds) {
    return [
        parseInt(seconds / 60 / 60),
        parseInt(seconds / 60 % 60),
        parseInt(seconds % 60)
    ]
        .join(":")
        .replace(/\b(\d)\b/g, "0$1")
}
meiyang
fuente
Una explicación adicional sobre por qué esta respuesta funcionaría para el interrogador o qué pudo haber estado mal en la pregunta original ayudaría a mejorar la calidad de esta respuesta.
Josh Burgess
1
Bastante autoexplicativo y buena respuesta, redujo y simplificó la respuesta superior.
AlexioVay
Respuesta precisa
:)
11

new Date().toString().split(" ")[4];

resultado 15:08:03

Artem Kyba
fuente
¡Genial gracias! Y una pequeña mejora que hice para mis necesidades fue convertir una duración en milisegundos a HH: MM: SS, new Date(new Date().getTime() - startTime).toUTCString().split(" ")[4]donde startTimese configuró previamente startTime = new Date().getTime();. (Tuve que usarlo toUTCString()porque de lo contrario los tiempos estaban fuera de una hora).
Richard Wiseman
10

Es bastante fácil

function toTimeString(seconds) {
  return (new Date(seconds * 1000)).toUTCString().match(/(\d\d:\d\d:\d\d)/)[0];
}
Hung Vo
fuente
Esto solo funciona si la duración de su tiempo es inferior a 1 día. Pero por lo demás, bastante agradable.
cjbarth
8
s2t=function (t){
  return parseInt(t/86400)+'d '+(new Date(t%86400*1000)).toUTCString().replace(/.*(\d{2}):(\d{2}):(\d{2}).*/, "$1h $2m $3s");
}

s2t(123456);

resultado:

1d 10h 17m 36s
Andy Wu
fuente
6

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:

function sec2str(t){
    var d = Math.floor(t/86400),
        h = ('0'+Math.floor(t/3600) % 24).slice(-2),
        m = ('0'+Math.floor(t/60)%60).slice(-2),
        s = ('0' + t % 60).slice(-2);
    return (d>0?d+'d ':'')+(h>0?h+':':'')+(m>0?m+':':'')+(t>60?s:s+'s');
}

devuelve "3d 16:32:12" o "16:32:12" o "32:12" o "12s"

nïkö
fuente
Esto será incorrecto por una duración de 24 días o más
Charlie Martin
¿Por qué estás comparando cadenas mayores de 0?
Jimmy Kane el
@JimmyKane porque el encasillamiento automático, ¡me encanta! (más: el código es más fácil de leer (tiene una conversión tipográfica por alguna razón, pero dejemos de cursar (los dos)). plus: la función fallaría solo si t es NaN, así que si desea seguridad: haga en la entrada!)
nïkö
@ nïkö Ok, entiendo, pero las nuevas versiones más estrictas de JS, linters, etc. pueden quejarse de eso. Solo digo, no me malinterpretes. Me gusta tu respuesta
Jimmy Kane
6

Me encantó la respuesta de Powtac, pero quería usarla en angular.js, así que creé un filtro usando su código.

.filter('HHMMSS', ['$filter', function ($filter) {
    return function (input, decimals) {
        var sec_num = parseInt(input, 10),
            decimal = parseFloat(input) - sec_num,
            hours   = Math.floor(sec_num / 3600),
            minutes = Math.floor((sec_num - (hours * 3600)) / 60),
            seconds = sec_num - (hours * 3600) - (minutes * 60);

        if (hours   < 10) {hours   = "0"+hours;}
        if (minutes < 10) {minutes = "0"+minutes;}
        if (seconds < 10) {seconds = "0"+seconds;}
        var time    = hours+':'+minutes+':'+seconds;
        if (decimals > 0) {
            time += '.' + $filter('number')(decimal, decimals).substr(2);
        }
        return time;
    };
}])

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

Mordred
fuente
Tengo dos objetos de fecha y hora y quiero calcular la diferencia de este objeto de 2 fechas y devolver la salida como en este formato: Hora: Minutos: Segundos con doble dígito como: 01: 02: 45. ¿Puede decirme o guiarme un poco? con tu codigo ??
Learning-Overthinker-Confused
4

Creo que en cuanto al rendimiento, este es, con mucho, el más rápido:

var t = 34236; // your seconds
var time = ('0'+Math.floor(t/3600) % 24).slice(-2)+':'+('0'+Math.floor(t/60)%60).slice(-2)+':'+('0' + t % 60).slice(-2)
//would output: 09:30:36
Rutger van Baren
fuente
Realmente asombroso. Felicidades!
Brynner Ferreira
Agradable ... y> 24 horas seguro.
Jeffz
4
function toHHMMSS(seconds) {
    var h, m, s, result='';
    // HOURs
    h = Math.floor(seconds/3600);
    seconds -= h*3600;
    if(h){
        result = h<10 ? '0'+h+':' : h+':';
    }
    // MINUTEs
    m = Math.floor(seconds/60);
    seconds -= m*60;
    result += m<10 ? '0'+m+':' : m+':';
    // SECONDs
    s=seconds%60;
    result += s<10 ? '0'+s : s;
    return result;
}

Ejemplos

    toHHMMSS (111); 
    "01:51"

    toHHMMSS (4444);
    "01:14:04"

    toHHMMSS (33);
    "00:33"
mashi
fuente
También pondría un Math.floor()segundo en los segundos, ya que podrían darse en decimales. (Pasó conmigo.)
Invierno
3

Aquí hay otra versión, que también maneja días:

function FormatSecondsAsDurationString( seconds )
{
    var s = "";

    var days = Math.floor( ( seconds / 3600 ) / 24 );
    if ( days >= 1 )
    {
        s += days.toString() + " day" + ( ( days == 1 ) ? "" : "s" ) + " + ";
        seconds -= days * 24 * 3600;
    }

    var hours = Math.floor( seconds / 3600 );
    s += GetPaddedIntString( hours.toString(), 2 ) + ":";
    seconds -= hours * 3600;

    var minutes = Math.floor( seconds / 60 );
    s += GetPaddedIntString( minutes.toString(), 2 ) + ":";
    seconds -= minutes * 60;

    s += GetPaddedIntString( Math.floor( seconds ).toString(), 2 );

    return s;
}

function GetPaddedIntString( n, numDigits )
{
    var nPadded = n;
    for ( ; nPadded.length < numDigits ; )
    {
        nPadded = "0" + nPadded;
    }

    return nPadded;
}
M Katz
fuente
3

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.

function secondsToTime(seconds) {
    const start = new Date(1970, 1, 1, 0, 0, 0, 0).getTime();
    const end = new Date(1970, 1, 1, 0, 0, parseInt(seconds), 0).getTime();
    const duration = end - start;

    return new Date(duration).toString().replace(/.*(\d{2}:\d{2}:\d{2}).*/, "$1");
}
Ninjakannon
fuente
2

Así es como lo hice. Parece funcionar bastante bien, y es extremadamente compacto. (Sin embargo, utiliza muchos operadores ternarios)

function formatTime(seconds) {
  var hh = Math.floor(seconds / 3600),
    mm = Math.floor(seconds / 60) % 60,
    ss = Math.floor(seconds) % 60;
  return (hh ? (hh < 10 ? "0" : "") + hh + ":" : "") + ((mm < 10) && hh ? "0" : "") + mm + ":" + (ss < 10 ? "0" : "") + ss
}

... y para formatear cadenas ...

String.prototype.toHHMMSS = function() {
  formatTime(parseInt(this, 10))
};
novato1024
fuente
2

Puede usar la siguiente función para convertir el tiempo (en segundos) al HH:MM:SSformato:

var convertTime = function (input, separator) {
    var pad = function(input) {return input < 10 ? "0" + input : input;};
    return [
        pad(Math.floor(input / 3600)),
        pad(Math.floor(input % 3600 / 60)),
        pad(Math.floor(input % 60)),
    ].join(typeof separator !== 'undefined' ?  separator : ':' );
}

Sin pasar un separador, se usa :como separador (predeterminado):

time = convertTime(13551.9941351); // --> OUTPUT = 03:45:51

Si desea usarlo -como separador, simplemente páselo como el segundo parámetro:

time = convertTime(1126.5135155, '-'); // --> OUTPUT = 00-18-46

Manifestación

var convertTime = function (input, separator) {
    var pad = function(input) {return input < 10 ? "0" + input : input;};
    return [
        pad(Math.floor(input / 3600)),
        pad(Math.floor(input % 3600 / 60)),
        pad(Math.floor(input % 60)),
    ].join(typeof separator !== 'undefined' ?  separator : ':' );
}

document.body.innerHTML = '<pre>' + JSON.stringify({
    5.3515555 : convertTime(5.3515555),
    126.2344452 : convertTime(126.2344452, '-'),
    1156.1535548 : convertTime(1156.1535548, '.'),
    9178.1351559 : convertTime(9178.1351559, ':'),
    13555.3515135 : convertTime(13555.3515135, ',')
}, null, '\t') +  '</pre>';

Ver también este violín .

John Slegers
fuente
1

Así es como lo hice

function timeFromSecs(seconds)
{
    return(
    Math.floor(seconds/86400)+'d :'+
    Math.floor(((seconds/86400)%1)*24)+'h : '+
    Math.floor(((seconds/3600)%1)*60)+'m : '+
    Math.round(((seconds/60)%1)*60)+'s');
}

timeFromSecs (22341938) devolverá '258d 14h 5m 38s'

dt192
fuente
1

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).

    // returns  (-)d.h:mm:ss(.f)
    //          (-)h:mm:ss(.f)
    //          (-)m:ss(.f)
    function formatSeconds (value, fracDigits) {
        var isNegative = false;
        if (isNaN(value)) {
            return value;
        } else if (value < 0) {
            isNegative = true;
            value = Math.abs(value);
        }
        var days = Math.floor(value / 86400);
        value %= 86400;
        var hours = Math.floor(value / 3600);
        value %= 3600;
        var minutes = Math.floor(value / 60);
        var seconds = (value % 60).toFixed(fracDigits || 0);
        if (seconds < 10) {
            seconds = '0' + seconds;
        }

        var res = hours ? (hours + ':' + ('0' + minutes).slice(-2) + ':' + seconds) : (minutes + ':' + seconds);
        if (days) {
            res = days + '.' + res;
        }
        return (isNegative ? ('-' + res) : res);
    }

// imitando el formato de duración del lado del servidor (.net, C #) como:

    public static string Format(this TimeSpan interval)
    {
        string pattern;
        if (interval.Days > 0)          pattern = @"d\.h\:mm\:ss";
        else if (interval.Hours > 0)    pattern = @"h\:mm\:ss";
        else                            pattern = @"m\:ss";
        return string.Format("{0}", interval.ToString(pattern));
    }
Peter Zehnder
fuente
1

Puede usar Momement.js con el complemento de formato momento-duración :

var seconds = 3820;
var duration = moment.duration(seconds, 'seconds');
var formatted = duration.format("hh:mm:ss");
console.log(formatted); // 01:03:40
<!-- Moment.js library -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>

<!-- moment-duration-format plugin -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-duration-format/1.3.0/moment-duration-format.min.js"></script>

Ver también este violín

Oleksiy Kachynskyy
fuente
Funciona como un encanto (excepto el formato que no está definido) para convertir una duración en un objeto con meses, días, horas, minutos y segundos
Pi Home Server
1

const secondsToTime = (seconds, locale) => {
    const date = new Date(0);
    date.setHours(0, 0, seconds, 0);
    return date.toLocaleTimeString(locale);
}
console.log(secondsToTime(3610, "en"));

donde el parámetro de configuración regional ("en", "de", etc.) es opcional

JukkaP
fuente
1
secToHHMM(number: number) {
    debugger;
    let hours = Math.floor(number / 3600);
    let minutes = Math.floor((number - (hours * 3600)) / 60);
    let seconds = number - (hours * 3600) - (minutes * 60);
    let H, M, S;
    if (hours < 10) H = ("0" + hours);
    if (minutes < 10) M = ("0" + minutes);
    if (seconds < 10) S = ("0" + seconds);
    return (H || hours) + ':' + (M || minutes) + ':' + (S || seconds);
}
Israel
fuente
1

Aquí hay una línea actualizada para 2019:

//your date
var someDate = new Date("Wed Jun 26 2019 09:38:02 GMT+0100") 

var result = `${String(someDate.getHours()).padStart(2,"0")}:${String(someDate.getMinutes()).padStart(2,"0")}:${String(someDate.getSeconds()).padStart(2,"0")}`

//result will be "09:38:02"
DataGreed
fuente
Creo que el OP quiere convertir una duración (segundos) no un Dateobjeto.
mrdaliri
Uy, mi mal :(
DataGreed
1

¡Aquí hay una solución bastante simple que se redondea al segundo más cercano!

var returnElapsedTime = function(epoch) {
  //We are assuming that the epoch is in seconds
  var hours = epoch / 3600,
      minutes = (hours % 1) * 60,
      seconds = (minutes % 1) * 60;
  return Math.floor(hours) + ":" + Math.floor(minutes) + ":" + Math.round(seconds);
}

ComandoScorch
fuente
1

Este es uno que escribí recientemente para MM: SS. No es exacto a la pregunta, pero es un formato de una línea diferente.

const time = 60 * 2 + 35; // 2 minutes, 35 seconds
const str = (~~(time / 60) + "").padStart(2, '0') + ":" + (~~((time / 60) % 1 * 60) + "").padStart(2, '0');

str // 02:35

Editar: Esto se agregó por variedad, pero la mejor solución aquí es https://stackoverflow.com/a/25279399/639679 a continuación.

Matt Kenefick
fuente