Segundos JavaScript para a sequência de tempo com o formato hh: mm: ss

300

Quero converter uma duração de tempo, ou seja, número de segundos em sequência de tempo separada por dois pontos (hh: mm: ss)

Encontrei algumas respostas úteis aqui, mas todos eles falam sobre a conversão para o formato x horas e x minutos.

Então, existe um pequeno trecho que faz isso no jQuery ou apenas no JavaScript bruto?

medk
fonte
11
Pontos de referência de algumas das respostas sugeridas neste tópico. jsperf.com/ms-to-hh-mm-ss-time-format
Claudijo:

Respostas:

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

Você pode usá-lo agora como:

alert("5678".toHHMMSS());

Fragmento de trabalho:

powtac
fonte
1
Obrigado pela ideia do protótipo, gosto de como é mais fácil chamá-lo. Prototipei o número para poder chamá-lo também. Eu também encontrei esta resposta que removeria as horas e os minutos, caso não fossem necessários.
alunsford3
21
use o operador "%" >> var minutes = Math.floor ((sec_num% 3600) / 60); var segundos = Math.floor (sec_num% 60);
IvanM 31/03
3
ah obrigado. Eu não vejo isso funcionando nos dois sentidos como uma string até você chamar .toString () no número inteiro. você pode fazê-lo funcionar no sentido inverso ao analisar int também
o Sonic Alma
51
Não coloque o protótipo, apenas crie uma função de utilidade.
Michael J. Calkins
15
modificar protótipo para tal coisa? 390 votos positivos? seriamente?
Lukas Liesis
197

Você pode fazer isso sem nenhuma biblioteca JS externa com a ajuda do método JS Date, como a seguir:

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
fonte
4
Por que essa resposta é tão baixa? Eu o comprei em 2011, provavelmente o IE 7 e 8 foi a base que não o suportará, mas é final de 2014, portanto, essa solução simples e sem complicações deve ser muito maior.
Emil Borconi
2
No MDN: se um parâmetro que você especificar estiver fora do intervalo esperado, setSeconds () tentará atualizar as informações de data no objeto Date de acordo. Por exemplo, se você usar 100 para secondsValue, os minutos armazenados no objeto Date serão incrementados em 1 e 40 serão usados ​​por segundos. Então sim, parece ser bom!
Andrew Andrew
40
Eu gosto desta resposta. Pode ser ainda mais curto: new Date(1000 * seconds).toISOString().substr(11, 8).
Bohumir Zamecnik
4
Boa resposta. Você pode usar .replace(/^[0:]+/, "")after substrpara remover todos os zeros e :desde o início da string.
Palo
1
Adicione isso na frente para lidar com o tempo por 24 horas. parseInt (d / 86400) + "d"
Tofandel 17/10/19
82

Para obter a parte do tempo no formato hh:MM:ss, você pode usar esta expressão regular:

(Isso foi mencionado acima no mesmo post por alguém, obrigado por isso.)

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

Raj
fonte
8
+1 - Super simples; obrigado! Apenas usei uma variante disso para mostrar apenas os minutos e segundos:var myDate = new Date().toTimeString().replace(/.*(\d{2}:\d{2})(:\d{2}).*/, "$1");
Topher Fangio 17/05
1
não deveria ser "nova data (nula, nula, nula, nula, timeInSecs) .toTimeString (). replace (/.* (\ d {2}:) (\ d {2}: \ d {2 }). * /, "$ 2") "?
Obie 27/08
6
O uso de replaceé confuso. Por que não usar new Date(null, null, null, null, null, timeInSeconds).toTimeString().match(/\d{2}:\d{2}:\d{2}/)[0]?
Călin Darie 4/04
4
Isso é bom para mostrar um determinado horário, mas observe que a pergunta (e outras respostas aqui) são sobre mostrar uma duração, ou seja, um determinado número de segundos, independentemente do horário atual.
mahemoff 29/09/14
4
Versão mais simples disso: #new Date().toTimeString().split(" ")[0]
Henrik N
52

Eu recomendo javascript comum, usando o 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);

(Obviamente, o objeto Date criado terá uma data real associada a ele, mas esses dados são estranhos; portanto, para esses fins, você não precisa se preocupar com isso.)

JellicleCat
fonte
Parece fazer a data no fuso horário local, que no meu caso adiciona 1 hora ao horário. Com segundos = 0, recebo "01:00:00" (01 de janeiro de 1970 às 01:00:00 GMT + 0100 (CET)), o que está errado.
mivk
3
Eu obtenho um resultado correto se eu usar date.getUTCHours()e date.getUTCMinutes().
mivk
Não entendo por que você está retornando um carimbo de data / hora de 12 horas quando ele pediu uma duração?
Nathan C. Tresch
@JellicleCat Alterado para +1, e um nome bonito.
Nathan C. Tresch
1
Eu gosto disso, mas assume que a duração é inferior a 24h
Rory
40

Uma pesquisa no Google encontrou 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
fonte
8
secondsToTime(119.9)=> Object {h: 0, m: 1, s: 60}. Para corrigir isso, adicione secs = Math.round(secs);no início do método. Claro, vimos este bug durante a demo ...
Benjamin Crouzier
29

Variação sobre um tema. Lida com segundos de um dígito de maneira um pouco 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
fonte
Obrigado por me poupar uma hora nisso
starsinmypockets
29

Aqui está a minha opinião:

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 esperados:

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
fonte
Você poderia escrever isso 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 Acho um pouco confuso ter uma função que requer dois secondargumentos. Acho minha versão mais clara, mesmo que seja um pouco mais detalhada.
Tom Esterez
seconds: numberanotações de tipo, em es6?
Olian04
1
A vírgula à direita @pstanton é suportada desde o IE9: caniuse.com/#feat=mdn-javascript_grammar_trailing_commas . Eu pessoalmente escolho ignorar esses navegadores antigos agora. Mas você está certo, eu o removi, então a resposta é mais genérica.
Tom Esterez
1
Ótima solução. Talvez apenas mude os segundos comoconst s = Math.round(seconds % 60);
Raff
16

Eu gosto da primeira resposta. Existem algumas otimizações:

  • os dados de origem são um número. cálculos adicionais não são necessários.

  • muito excesso de computação

Código do 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.
fonte
1
Eu acho que essa função é um recurso usado na frente e, portanto, protótipo de String e não Number. E Number sempre pode ser uma string, mas não o contrário.
Powtac
3
Eu acho que Numberestá certo, porque secondsé, de fato, um número. você deve converter da string antes de usar esta função, que é a coisa certa a fazer!
perfil completo de Caesarsol
2
resposta votada, como esta, é ruim. Aposto que você não precisa de TODOS os números para ter esse método. Não modifique o protótipo para itens utilitários aleatórios.
Lukas Liesis
ou apenas para prototipar e torná-lo uma função numToHHMMSS ou strTOHHMMSS
yeahdixon
Essa solução funciona enquanto a solução escolhida gera segundos de 60 para determinados valores.
AndroidDev 7/05/19
14

Usando a incrível 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);
}

Isso permite especificar qualquer duração, seja horas, minutos, segundos, moinhos e retorna uma versão legível por humanos.

Pradeep
fonte
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
fonte
Explicações adicionais sobre por que essa resposta funcionaria para o questionador ou o que pode estar errado na pergunta original ajudariam a aumentar a qualidade dessa resposta.
Josh Burgess
1
Bastante auto-explicativa e boa resposta, reduziu e simplificou a resposta superior.
AlexioVay
Resposta precisa
:)
11

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

resultado 15:08:03

Artem Kyba
fonte
Nice - obrigado! E uma pequena melhoria que fiz para minhas necessidades foi converter uma duração em milissegundos em HH: MM: SS - new Date(new Date().getTime() - startTime).toUTCString().split(" ")[4]onde startTimefoi definido anteriormente startTime = new Date().getTime();. (Eu tive que usar toUTCString(), porque caso contrário, os tempos eram de uma hora fora.)
Richard Wiseman
10

É bem fácil,

function toTimeString(seconds) {
  return (new Date(seconds * 1000)).toUTCString().match(/(\d\d:\d\d:\d\d)/)[0];
}
Hung Vo
fonte
Isso só funciona se a duração do seu tempo for inferior a 1 dia. Mas por outro lado, muito legal.
Cjbarth 12/11
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
fonte
6

Eu gostei mais da Webjins, então a estendi para exibir dias com sufixo de anúncio, tornei a exibição condicional e incluída como sufixo em segundos simples:

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

retorna "3d 16:32:12" ou "16:32:12" ou "32:12" ou "12s"

nïkö
fonte
Isso ficará incorreto por períodos de 24 dias ou mais #
Charlie Martin
por que você está comparando cadeias maiores que 0?
21918 Jimmy Kane
@JimmyKane porque a digitação automática - eu adoro! (plus: o código é mais fácil de ler (você tem tipecasting por um motivo, mas vamos parar de trollar (nós dois)). plus: a função falharia apenas se t for NaN - portanto, se você deseja segurança: Na entrada!)
nïkö 23/04/19
@ nïkö Ok, eu entendo, mas novas versões JS, linters etc mais rigorosas podem reclamar disso. Apenas dizendo, dong me entenda errado. Eu gosto da sua resposta
Jimmy Kane
6

Eu amei a resposta de Powtac, mas queria usá-la no angular.js, então criei um filtro usando o código dele.

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

É funcionalmente idêntico, exceto que adicionei um campo decimal opcional para exibir segundos fracionários. Use-o como faria com qualquer outro filtro:

{{ elapsedTime | HHMMSS }} exibe: 01:23:45

{{ elapsedTime | HHMMSS : 3 }} exibe: 01:23:45.678

Mordred
fonte
Eu tenho dois objetos datetime ee eu quero calcular a diferença desse objeto 2 datetime e retornar a saída como neste formato: Hora: Minutos: Segundos com dois dígitos, como: 01: 02: 45. com o seu código ??
Learning-Overthinker-Confused
4

Acho que o desempenho é de longe o mais 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
fonte
Realmente fantástico. Parabéns!
Brynner Ferreira
Nice ... e> 24 horas em segurança.
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;
}

Exemplos

    paraHHMMSS (111); 
    "01:51"

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

    paraHHMMSS (33);
    "00:33"
mashi
fonte
Eu colocaria um Math.floor()nos segundos também, pois eles podem ser dados em decimais. (Aconteceu comigo.)
Inverno
3

Aqui está mais uma versão, que também lida com dias:

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
fonte
3

Uma expressão regular pode ser usada para corresponder à substring de horário na string retornada do toString()método do objeto Date, formatado da seguinte maneira: "Qui 05 de julho de 2012 02:45:12 GMT + 0100 (horário de verão GMT)". Observe que esta solução usa o tempo desde a época: meia-noite de 1º de janeiro de 1970. Essa solução pode ser de uma só linha, embora sua divisão torne muito mais fácil 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
fonte
2

Aqui está como eu fiz isso. Parece funcionar bastante bem e é extremamente compacto. (Porém, ele usa muitos operadores ternários)

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
}

... e para formatar strings ...

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

Você pode usar a seguinte função para converter o tempo (em segundos) para o 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 : ':' );
}

Sem passar um separador, ele usa :como separador (padrão):

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

Se você deseja usar -como separador, apenas passe-o como o segundo parâmetro:

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

Demo

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

Veja também este violino .

John Slegers
fonte
1

Foi assim que eu fiz

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) retornará '258d 14h 5m 38s'

dt192
fonte
1

Pessoalmente, prefiro a unidade principal (dias, horas, minutos) sem zeros à esquerda. Porém, os segundos sempre devem ser conduzidos por minutos (0:13), esta apresentação é facilmente considerada como 'duração', sem maiores explicações (marcando como min, seg (s) etc.), utilizáveis ​​em vários idiomas (internacionalização).

    // 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 a formatação de duração do lado do 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
fonte
1

Você pode usar o Momement.js com o plug - in no formato momento-duração :

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>

Veja também este violino

Oleksiy Kachynskyy
fonte
Funciona como um encanto (exceto o formato que não está definido) para converter uma duração em um objeto com meses, dias, horas, minutos e 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"));

onde o parâmetro locale ("en", "de" etc.) é opcional

JukkaP
fonte
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
fonte
1

Aqui está uma lista atualizada 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
fonte
Eu acho que o OP quer converter uma duração (segundos) e não um Dateobjeto.
Mrdaliri 11/07/19
oops, meu mal :(
DataGreed 30/07/19
1

Aqui está uma solução bastante simples que arredonda para o segundo mais próximo!

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

CommandoScorch
fonte
1

Escrevi recentemente para MM: SS. Não é exato para a pergunta, mas é um formato de uma linha 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

Edit: Isso foi adicionado por variedade, mas a melhor solução aqui é https://stackoverflow.com/a/25279399/639679 abaixo.

Matt Kenefick
fonte