Javascript segundos para minutos e segundos

170

Esse é um problema comum, mas não sei como resolvê-lo. O código abaixo funciona bem.

var mind = time % (60 * 60);
var minutes = Math.floor(mind / 60);

var secd = mind % 60;
var seconds = Math.ceil(secd);

No entanto, quando chego a 1 hora ou 3600 segundos, ele retorna 0 minutos e 0 segundos. Como posso evitar isso para que ele retorne todos os minutos?

obrigado

James Moore
fonte
Isso ocorre porque quando time = 3600, 3600% 3600 é sempre 0 ... então todo o resto será 0 de acordo com o seu cálculo.
MSI

Respostas:

338

Para obter o número de minutos completos, divida o número total de segundos por 60 (60 segundos / minuto):

var minutes = Math.floor(time / 60);

E para obter os segundos restantes, multiplique os minutos completos por 60 e subtraia do total de segundos:

var seconds = time - minutes * 60;

Agora, se você também deseja obter as horas completas, divida o número total de segundos por 3600 (60 minutos / hora · 60 segundos / minuto) primeiro e calcule os segundos restantes:

var hours = Math.floor(time / 3600);
time = time - hours * 3600;

Então você calcula os minutos completos e os segundos restantes.

Bônus:

Use o código a seguir para imprimir bem a hora (sugerido por Dru)

function str_pad_left(string,pad,length) {
    return (new Array(length+1).join(pad)+string).slice(-length);
}

var finalTime = str_pad_left(minutes,'0',2)+':'+str_pad_left(seconds,'0',2);
quiabo
fonte
57
É um pouco mais limpo obter os segundos restantes executando 'var seconds = time% 60'.
Edward D'Souza
11
@Radio adiciona zeros à esquerda usando function str_pad_left(string,pad,length){ return (new Array(length+1).join(pad)+string).slice(-length); } var finalTime = str_pad_left(minutes,'0',2)+':'+str_pad_left(seconds,'0',2);
Dru
1
Esta solução não funcionará para valores negativos de time. Se você para a entrada de exemplo -1 segundos, você get -1minute e 59 segundos de volta ...
Pylinux
5
Qual é a sensação de ter negativo time? Logicamente uma diferença de tempo é sempre positivo
Mcont
4
Você pode usar o módulo para obter o número de segundos, é mais legível na minha opinião. var seconds = time % 60
JCM
106

Outra solução sofisticada:

function fancyTimeFormat(duration)
{   
    // Hours, minutes and seconds
    var hrs = ~~(duration / 3600);
    var mins = ~~((duration % 3600) / 60);
    var secs = ~~duration % 60;

    // Output like "1:01" or "4:03:59" or "123:03:59"
    var ret = "";

    if (hrs > 0) {
        ret += "" + hrs + ":" + (mins < 10 ? "0" : "");
    }

    ret += "" + mins + ":" + (secs < 10 ? "0" : "");
    ret += "" + secs;
    return ret;
}

~~é uma abreviação de Math.floor, veja este link para mais informações

Experimente on-line

Vishal
fonte
14
Qual é o significado de ~~?
mcont
9
É uma base básica para Math.floor, veja este link .
lapin 20/05
Está funcionando bem ..... :) Você pode arredondar o valor dessa maneira hrs = hrs.toFixed (0); mins = mins.toFixed (0); secs = secs.toFixed (0);
Abdul Khaliq
1
Obrigado por esta solução! Eu adicionei time = math.round(time)à primeira linha para me dar segundos arredondados.
Fotoflo
Esta é a solução mais correta. Como mencionado acima, a solução com mais votos nesta página exibe 180 segundos como 2m60s.
SongBox 19/10/19
71

Para pessoas que esperam por uma solução rápida, simples e, portanto, curta para formatar segundos em M:SS:

function fmtMSS(s){return(s-(s%=60))/60+(9<s?':':':0')+s}

feito ..
A função aceita qualquer um Number(de preferência) ou um String(2 de conversão de penalidades ", que você pode reduzir pela metade, antecedendo +na argumentação da chamada de função para scomo em: fmtMSS(+strSeconds)), representando segundos inteiros positivos scomo argumento.

Exemplos:

fmtMSS(    0 );  //   0:00
fmtMSS(   '8');  //   0:08
fmtMSS(    9 );  //   0:09
fmtMSS(  '10');  //   0:10
fmtMSS(   59 );  //   0:59
fmtMSS( +'60');  //   1:00
fmtMSS(   69 );  //   1:09
fmtMSS( 3599 );  //  59:59
fmtMSS('3600');  //  60:00
fmtMSS('3661');  //  61:01
fmtMSS( 7425 );  // 123:45

Demolir:

function fmtMSS(s){   // accepts seconds as Number or String. Returns m:ss
  return( s -         // take value s and subtract (will try to convert String to Number)
          ( s %= 60 ) // the new value of s, now holding the remainder of s divided by 60 
                      // (will also try to convert String to Number)
        ) / 60 + (    // and divide the resulting Number by 60 
                      // (can never result in a fractional value = no need for rounding)
                      // to which we concatenate a String (converts the Number to String)
                      // who's reference is chosen by the conditional operator:
          9 < s       // if    seconds is larger than 9
          ? ':'       // then  we don't need to prepend a zero
          : ':0'      // else  we do need to prepend a zero
        ) + s ;       // and we add Number s to the string (converting it to String as well)
}

Nota: O intervalo negativo pode ser adicionado anexando (0>s?(s=-s,'-'):'')+a expressão de retorno (na verdade, (0>s?(s=-s,'-'):0)+também funcionaria).

GitaarLAB
fonte
Eu sugiro adicionar Math.floor(s)à última linha para obter resultados mais limpos. Funcionando muito bem de qualquer maneira, obrigado!
Diego Fortes
@PossessWithin: Não, você NÃO deve "adicionar Math.floor (s) à última linha" (do snippet de quebra) por várias razões, principalmente porque isso introduziria um bug para valores entre 9e 10sem modificações adicionais; se você digitou, por exemplo 69.25, a saída seria em 1:9vez de 1:09! Essa função (para a qual eu especifiquei explicitamente segundos inteiros) é planejada e criada com amor como ferramenta de trituração de alto desempenho / 'engine' (não é um jogo ninja para tamanho) e, como tal, considero inapropriado sobrecarregar o mecanismo com verificações desnecessárias / limpeza / filtragem ...
GitaarLAB
... opções de trabalho (como NaN, +/-Infinityetc.) e de arredondamento que devem ser feitas pelo programador antes de chamar a função, com base nas necessidades específicas e nos possíveis valores de entrada que o aplicativo pode encontrar! Naturalmente, você pode corrigi-lo se seu conhecimento do domínio sobre os valores de entrada esperados exigir que seu caso de uso em particular quase sempre receba valores de ponto flutuante e o teste de desempenho indica que seu aplicativo. No seu caso, onde você deseja patch única piso de valores positivos você deve ....
GitaarLAB
... modifique (9<s?':':':0')para (10>s?':0':':')(adicionando 1 caractere, mas 'sacrificando' 5 de 6 caminhos verdadeiros para caminhos falsos) OU (10<=s?':':':0')(adicionando 2 caracteres, mas mantendo 5 de 6 caminhos verdadeiros). Então eu aconselho a mudar esse final +spara em +(s|0) vez de Math.floor(s) , para não destruir a beleza de não precisar resolver e ligar Math.floor enquanto ainda estiver operando corretamente em todo o+/-MAX_SAFE_INTEGER intervalo de 53 bits , em vez de apenas '32' (não assinado) ou 31 bits (assinado)! Note-se que ABS(s)magnetude é garantido para ser menor do que 60, de modo que o assinou ...
GitaarLAB
... assinado bit a bit OU é seguro. Observe também que essa modificação em particular, sem incluir os segundos restantes, faria com que a função produzisse segundos fracionários sem zeros fracionários à direita, mas geralmente terá mais de três dígitos fracionais diferentes de zero, com os quais você provavelmente também precisaria lidar. Finalmente, quando combinada com o código opcional de pré-correção para o intervalo negativo, essa modificação específica efetivamente truncaria os segundos (não os pavimentando ). PS: PFFT, whoever came up with just 512 char limit for any meaningful comment should be...
GitaarLAB 24/06/19
21

Você também pode usar o objeto Date nativo:

var date = new Date(null);
date.setSeconds(timeInSeconds);

// retrieve time ignoring the browser timezone - returns hh:mm:ss
var utc = date.toUTCString();
// negative start index in substr does not work in IE 8 and earlier
var time = utc.substr(utc.indexOf(':') - 2, 8)

// retrieve each value individually - returns h:m:s
var time = date.getUTCHours() + ':' + date.getUTCMinutes() + ':' +  date.getUTCSeconds();

// does not work in IE8 and below - returns hh:mm:ss
var time = date.toISOString().substr(11, 8);

// not recommended - only if seconds number includes timezone difference
var time = date.toTimeString().substr(0, 8);

Obviamente, esta solução funciona apenas por timeInSeconds menos de 24 horas;)

hamczu
fonte
1
Não tinha pensado em deixar o objeto Date lidar com a formatação. Menos flexível, mas se você quiser hh: mm: ss (ou uma subseção de que) isso é ótimo
MartinAnsty
Eu tentei isso com 25 segundos e retornou 01:00:25, o que equivale a 1 hora e 25 segundos.
timstermatic
Sim, provavelmente por causa do seu fuso horário. Atualizei a solução para lidar com este caso.
hamczu
datetambém pode ser construído comovar date = new Date(timeInSeconds * 1000)
Nuno André
20

2019 melhor variante

Formato hh:mm:ss

console.log(display(60 * 60 * 2.5 + 25)) // 2.5 hours + 25 seconds

function display (seconds) {
  const format = val => `0${Math.floor(val)}`.slice(-2)
  const hours = seconds / 3600
  const minutes = (seconds % 3600) / 60

  return [hours, minutes, seconds % 60].map(format).join(':')
}

Илья Зеленько
fonte
hmmm, secondsé const. você não pode reatribuir.
Ronapelbaum 28/04/19
@ronapelbaum este argumento, não é constante, eu não entendo o que quer dizer
Илья Зеленько
@ronapelbaum se você atribuir os segundos em vez de obtê-los como parâmetro a ser usado let, por exemplo, function display (state) { let seconds = state.seconds; ... }talvez tenha sido esse o motivo de seu erro?
retrovertigo
Um parâmetro de função deve ser tratado como const. Quando você usa, %=está redesignando esse parâmetro. Apenas useseconds%60
ronapelbaum
16
function secondsToMinutes(time){
    return Math.floor(time / 60)+':'+Math.floor(time % 60);
}
El0din
fonte
3
Isso pode ser melhorado com zero preenchendo os segundos: function secondsToMinutes(time){ return Math.floor(0 / 60)+':'+('0'+Math.floor(0 % 60)).slice(-2); }
Kus 07/12
legais! obrigado @Kus. Você pode substituir esses dois 0s por time, estou correto?
Mikey
2
@mikey oops! Sim,function secondsToMinutes(time){ return Math.floor(time / 60) + ':' + ('0' + Math.floor(time % 60)).slice(-2) }
Kus
12

Para adicionar zeros à esquerda, eu faria:

var minutes = "0" + Math.floor(time / 60);
var seconds = "0" + (time - minutes * 60);
return minutes.substr(-2) + ":" + seconds.substr(-2);

Agradável e curto

Ids Klijnsma
fonte
9

Limpe um revestimento usando o ES6


const secondsToMinutes = seconds => Math.floor(seconds / 60) + ':' + ('0' + Math.floor(seconds % 60)).slice(-2);
Sam Logan
fonte
6

Um liner (não funciona com horas):

 function sectostr(time) {
    return ~~(time / 60) + ":" + (time % 60 < 10 ? "0" : "") + time % 60;
 }
Dillon
fonte
4

Segundos para h: mm: ss

var hours = Math.floor(time / 3600);
time -= hours * 3600;

var minutes = Math.floor(time / 60);
time -= minutes * 60;

var seconds = parseInt(time % 60, 10);

console.log(hours + ':' + (minutes < 10 ? '0' + minutes : minutes) + ':' + (seconds < 10 ? '0' + seconds : seconds));
kayz1
fonte
Alguém pode minutes < 10 ? '0' + minutes : minutesme explicar , assumindo apenas o conhecimento básico de js?
Zediiiii
Se os minutos tiverem um dígito (<10), coloque o zero à esquerda antes de zero.
kayz1
Isso ajuda! Eu não percebi que "?" era o operador ternário em js.
Zediiiii
4

A função a seguir ajudará você a obter dias, horas, minutos e segundos

toDDHHMMSS(inputSeconds){
        const Days = Math.floor( inputSeconds / (60 * 60 * 24) );
        const Hour = Math.floor((inputSeconds % (60 * 60 * 24)) / (60 * 60));
        const Minutes = Math.floor(((inputSeconds % (60 * 60 * 24)) % (60 * 60)) / 60 );
        const Seconds = Math.floor(((inputSeconds % (60 * 60 * 24)) % (60 * 60)) % 60 );
        let ddhhmmss  = '';
        if (Days > 0){
            ddhhmmss += Days + ' Day ';
        }
        if (Hour > 0){
            ddhhmmss += Hour + ' Hour ';
        }

        if (Minutes > 0){
            ddhhmmss += Minutes + ' Minutes ';
        }

        if (Seconds > 0){
            ddhhmmss += Seconds + ' Seconds ';
        }
        return ddhhmmss;
    }
alert( toDDHHMMSS(2000));
sivamani s
fonte
Eu gosto deste. Mudei if (Days > 0){ ddhhmmss += Days + ' Day '; }para if (Days > 0) {ddhhmmss += Days === 1 ? Days + ' Day ' : Days + ' Days '};dizer 1 Day, 2 Days, 3 Daysetc. Semelhante pode ser feito para os outros.
Ste
4

Depois de tudo isso, mais uma solução simples:

const time = new Date(null);
time.setSeconds(7530);
console.log(time.getHours(), time.getMinutes(), time.getSeconds());
user2734839
fonte
1
Usando time.setSeconds(1);retornos 1 0 1quando deveria ser 0 0 1.
Ste
3

Outra solução, porém muito mais elegante, é a seguinte:

/**
 * Convert number secs to display time
 *
 * 65 input becomes 01:05.
 *
 * @param Number inputSeconds Seconds input.
 */
export const toMMSS = inputSeconds => {
    const secs = parseInt( inputSeconds, 10 );
    let minutes = Math.floor( secs / 60 );
    let seconds = secs - minutes * 60;

    if ( 10 > minutes ) {
        minutes = '0' + minutes;
    }
    if ( 10 > seconds ) {
        seconds = '0' + seconds;
    }

    // Return display.
    return minutes + ':' + seconds;
};
Ahmad Awais
fonte
2

Para adicionar zeros, eu realmente não vejo a necessidade de ter uma outra função completa, onde você pode simplesmente usar, por exemplo

var mins=Math.floor(StrTime/60);
var secs=StrTime-mins * 60;
var hrs=Math.floor(StrTime / 3600);
RoundTime.innerHTML=(hrs>9?hrs:"0"+hrs) + ":" + (mins>9?mins:"0"+mins) + ":" + (secs>9?secs:"0"+secs);

É por isso que temos declarações condicionais em primeiro lugar.

(condição? se verdadeiro: se falso); portanto, se o exemplo segundos for maior que 9 do que apenas mostrar segundos, adicione uma sequência 0 antes dele.

Destino
fonte
2

tente o seguinte: Convertendo segundo para HOURS, MIN e SEC.

function convertTime(sec) {
    var hours = Math.floor(sec/3600);
    (hours >= 1) ? sec = sec - (hours*3600) : hours = '00';
    var min = Math.floor(sec/60);
    (min >= 1) ? sec = sec - (min*60) : min = '00';
    (sec < 1) ? sec='00' : void 0;

    (min.toString().length == 1) ? min = '0'+min : void 0;    
    (sec.toString().length == 1) ? sec = '0'+sec : void 0;    

    return hours+':'+min+':'+sec;
}
Sushil
fonte
2

var seconds = 60;
var measuredTime = new Date(null);
measuredTime.setSeconds(seconds); // specify value of SECONDS
var Time = measuredTime.toISOString().substr(11, 8);
document.getElementById("id1").value = Time;
<div class="form-group">
  <label for="course" class="col-md-4">Time</label>
  <div class="col-md-8">
    <input type="text" class="form-control" id="id1" name="field">Min
  </div>
</div>

Anmol Devta
fonte
2

Se você estiver usando o Moment.js , poderá usar o Durationobjeto incorporado

const duration = moment.duration(4825, 'seconds');

const h = duration.hours(); // 1
const m = duration.minutes(); // 20
const s = duration.seconds(); // 25
Gil Epshtain
fonte
2

ATUALIZAÇÃO 2020

Usando matemática básica e javascript simples, isso pode ser feito em apenas algumas linhas de código.

EXEMPLO - Converter 7735 secondsem HH:MM:SS.


MATEMÁTICA:

Os cálculos usam:

  1. Math.floor()- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/floor

A Math.floor()função retorna o maior número inteiro menor ou igual a um determinado número.

  1. %operador aritmético (Remainder) - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Remainder

O operador restante retorna o restante restante quando um operando é dividido por um segundo operando. É sempre necessário o sinal do dividendo.

Confira o código abaixo. Os segundos são divididos por 3600para obter o número de horas e o restante, usado para calcular o número de minutos e segundos.

HOURS => 7735 / 3600 = 2 remainder 535

MINUTES => 535 / 60 = 8 remainder 55

SECONDS => 55


ZEROS À ESQUERDA:

Muitas respostas aqui usam métodos complicados para mostrar o número de horas, minutos e segundos de maneira adequada com o zero inicial 45, 04etc. Isso pode ser feito usando padStart(). Isso funciona para strings, portanto, o número deve ser convertido em string usando toString().

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart

O padStart()método preenche a sequência atual com outra sequência (várias vezes, se necessário) até que a sequência resultante atinja o comprimento especificado. O preenchimento é aplicado desde o início da string atual.


CÓDIGO:

function secondsToTime(e){
    var h = Math.floor(e / 3600).toString().padStart(2,'0'),
        m = Math.floor(e % 3600 / 60).toString().padStart(2,'0'),
        s = Math.floor(e % 60).toString().padStart(2,'0');
    
    return h + ':' + m + ':' + s;
}

console.log(secondsToTime(7735));  //02:08:55

/*
secondsToTime(SECONDS) => HH:MM:SS 

secondsToTime(8)       => 00:00:08 
secondsToTime(68)      => 00:01:08
secondsToTime(1768)    => 00:29:28
secondsToTime(3600)    => 01:00:00
secondsToTime(5296)    => 01:28:16
secondsToTime(7735)    => 02:08:55
secondsToTime(45296)   => 12:34:56
secondsToTime(145296)  => 40:21:36
secondsToTime(1145296) => 318:08:16
*/

Jakub Muda
fonte
1

Você criou código suficiente para rastrear minutos e segundos porções de tempo.

O que você pode fazer é adicionar o fator de horas em:

var hrd = time % (60 * 60 * 60);
var hours = Math.floor(hrd / 60);

var mind = hrd % 60;
var minutes = Math.floor(mind / 60);

var secd = mind % 60;
var seconds = Math.ceil(secd);

var moreminutes = minutes + hours * 60

Isso lhe daria o que você precisa também.

Nevyn
fonte
Eu tentei isso usando o "tempo" como segundos e não funcionou. Por exemplo, 975 seg significa hrd = 975, o que significa horas é 16.
Spedge
1

Eu estava pensando em uma maneira mais rápida de fazer isso e é isso que eu vim com

var sec = parseInt(time);
var min=0;
while(sec>59){ sec-=60; min++;}

Se queremos converter "tempo" em minutos e segundos, por exemplo:

// time = 75,3 sec
var sec = parseInt(time); //sec = 75
var min=0;
while(sec>59){ sec-=60; min++;} //sec = 15; min = 1
Kamen Kotsev
fonte
1

Coloque meus dois centavos em:

function convertSecondsToMinutesAndSeconds(seconds){
            var minutes;
            var seconds;
            minutes = Math.floor(seconds/60);
            seconds = seconds%60;

            return [minutes, seconds];
        }

Então, é isso :

var minutesAndSeconds = convertSecondsToMinutesAndSeconds(101);

Terá a seguinte saída:

[1,41];

Então você pode imprimi-lo assim:

console.log('TIME : ' +  minutesSeconds[0] + ' minutes, ' + minutesSeconds[1] + ' seconds');

//TIME : 1 minutes, 41 seconds
thatOneGuy
fonte
1

O strftime.js ( strftime github ) é uma das melhores bibliotecas de formatação de horário. É extremamente leve - 30KB - e eficaz. Com ele, você pode converter segundos em tempo facilmente em uma linha de código, contando principalmente com a classe Date nativa.

Ao criar uma nova data, cada argumento opcional é posicional da seguinte maneira:

new Date(year, month, day, hours, minutes, seconds, milliseconds);

Portanto, se você inicializar uma nova data com todos os argumentos como zero até os segundos, receberá:

var seconds = 150;
var date = new Date(0,0,0,0,0,seconds);
=> Sun Dec 31 1899 00:02:30 GMT-0500 (EST)

Você pode ver que 150 segundos são 2 minutos e 30 segundos, como visto na data criada. Em seguida, usando um formato strftime ("% M:% S" para "MM: SS"), ele exibirá a sequência de minutos.

var mm_ss_str = strftime("%M:%S", date);
=> "02:30"

Em uma linha, seria semelhante a:

var mm_ss_str = strftime('%M:%S', new Date(0,0,0,0,0,seconds));
=> "02:30"

Além disso, isso permitiria o suporte intercambiável HH: MM: SS e MM: SS com base no número de segundos. Por exemplo:

# Less than an Hour (seconds < 3600)
var seconds = 2435;
strftime((seconds >= 3600 ? '%H:%M:%S' : '%M:%S'), new Date(0,0,0,0,0,seconds));
=> "40:35"

# More than an Hour (seconds >= 3600)
var seconds = 10050;
strftime((seconds >= 3600 ? '%H:%M:%S' : '%M:%S'), new Date(0,0,0,0,0,seconds));
=> "02:47:30"

E, é claro, você pode simplesmente passar o formato que desejar durante o tempo, se quiser que a seqüência de tempo seja mais ou menos semântica.

var format = 'Honey, you said you\'d be read in %S seconds %M minutes ago!';
strftime(format, new Date(0,0,0,0,0,1210));
=> "Honey, you said you'd be read in 10 seconds 20 minutes ago!"

Espero que isto ajude.

Sebastian Scholl
fonte
1
export function TrainingTime(props) {
    const {train_time } = props;
    const hours = Math.floor(train_time/3600);
    const minutes = Math.floor((train_time-hours * 3600) / 60);
    const seconds = Math.floor((train_time%60));

    return `${hours} hrs  ${minutes} min  ${seconds} sec`;
}
Abdul Rehman
fonte
2
Bem-vindo ao Stack Overflow. Conforme sugerido por @PhilRoggenbuck, uma explicação ajudaria. Para obter mais informações, leia stackoverflow.com/help/how-to-answer
Mikkel
0

Sugiro outra solução:

function formatTime(nbSeconds, hasHours) {
    var time = [],
        s = 1;
    var calc = nbSeconds;

    if (hasHours) {
        s = 3600;
        calc = calc / s;
        time.push(format(Math.floor(calc)));//hour
    }

    calc = ((calc - (time[time.length-1] || 0)) * s) / 60;
    time.push(format(Math.floor(calc)));//minute

    calc = (calc - (time[time.length-1])) * 60;
    time.push(format(Math.round(calc)));//second


    function format(n) {//it makes "0X"/"00"/"XX"
        return (("" + n) / 10).toFixed(1).replace(".", "");
    }

    //if (!hasHours) time.shift();//you can set only "min: sec"

    return time.join(":");
};
console.log(formatTime(3500));//58:20
console.log(formatTime(305));//05:05
console.log(formatTime(75609, true));//21:00:09
console.log(formatTime(0, true));//00:00:00

Sherali Turdiyev
fonte
0

Eu sei que foi resolvido de várias maneiras. Eu precisava dessa função para um script do After Effects, em que a poluição da velocidade ou do espaço para nome não é um problema. Largo aqui para alguém que precisa de algo semelhante. Também escrevi alguns testes e funcionou bem. Então aqui está o código:

Number.prototype.asTime = function () {
    var hour = Math.floor(this / 3600),
        min = Math.floor((this - hour * 3600) / 60),
        sec = this - hour * 3600 - min * 60,
        hourStr, minStr, secStr;
    if(hour){
        hourStr = hour.toString(),
        minStr = min < 9 ? "0" + min.toString() : min.toString();
        secStr = sec < 9 ? "0" + sec.toString() : sec.toString();
        return hourStr + ":" + minStr + ":" + secStr + "hrs";
    }
    if(min){
        minStr = min.toString();
        secStr = sec < 9 ? "0" + sec.toString() : sec.toString();
        return  minStr + ":" + secStr + "min";
    }
    return sec.toString() + "sec";
}
vladblindu
fonte