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?


11
Los puntos de referencia de algunas de las respuestas sugeridas en este hilo. jsperf.com/ms-to-hh-mm-ss-time-format
Claudijo

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:


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)


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)


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


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;
}

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;
}

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');

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;
}

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.


14
function formatTime(seconds) {
    return [
        parseInt(seconds / 60 / 60),
        parseInt(seconds / 60 % 60),
        parseInt(seconds % 60)
    ]
        .join(":")
        .replace(/\b(\d)\b/g, "0$1")
}

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


¡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];
}

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

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"


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


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

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"

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;
}

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");
}

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))
};

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 .



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'


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));
    }

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


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


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);
}

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"

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);
}


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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.