Converter segundos para HH-MM-SS com JavaScript?

Como posso converter segundos para uma string HH-MM-SS usando JavaScript?

Você não sabe namorar ? é um deve saber.

Usando datejs, apenas escreva algo como:

 (new Date).clearTime() .addSeconds(15457) .toString('H:mm:ss'); 

–atualizar

Hoje em dia o date.js está desatualizado e não é mantido, então use o ” Moment.js “, que é muito melhor, como apontado por TJ Crowder.

Você pode conseguir fazer isso sem qualquer biblioteca JavaScript externa com a ajuda do método JavaScript Date, como segue:

 var date = new Date(null); date.setSeconds(SECONDS); // specify value for SECONDS here var result = date.toISOString().substr(11, 8); 

Eu não acho que qualquer recurso embutido do object Date padrão fará isso para você de uma maneira que seja mais conveniente do que apenas fazer as contas sozinho.

 hours = Math.floor(totalSeconds / 3600); totalSeconds %= 3600; minutes = Math.floor(totalSeconds / 60); seconds = totalSeconds % 60; 

Como Cleiton apontou em sua resposta , moment.js pode ser usado para isso:

 moment().startOf('day') .seconds(15457) .format('H:mm:ss'); 
 function formatSeconds(seconds) { var date = new Date(1970,0,1); date.setSeconds(seconds); return date.toTimeString().replace(/.*(\d{2}:\d{2}:\d{2}).*/, "$1"); } 

Eu sei que isso é meio velho, mas …

ES2015:

 var toHHMMSS = (secs) => { var sec_num = parseInt(secs, 10) var hours = Math.floor(sec_num / 3600) % 24 var minutes = Math.floor(sec_num / 60) % 60 var seconds = sec_num % 60 return [hours,minutes,seconds] .map(v => v < 10 ? "0" + v : v) .filter((v,i) => v !== "00" || i > 0) .join(":") } 

Isso irá produzir:

 toHHMMSS(13545) // 03:45:45 toHHMMSS(180) // 03:00 toHHMMSS(18) // 00:18 

Isso faz o truque:

 function secondstotime(secs) { var t = new Date(1970,0,1); t.setSeconds(secs); var s = t.toTimeString().substr(0,8); if(secs > 86399) s = Math.floor((t - Date.parse("1/1/70")) / 3600000) + s.substr(2); return s; } 

(Originada a partir daqui )

Tente isto:

 function toTimeString(seconds) { return (new Date(seconds * 1000)).toUTCString().match(/(\d\d:\d\d:\d\d)/)[0]; } 
  var timeInSec = "661"; //even it can be string String.prototype.toHHMMSS = function () { /* extend the String by using prototypical inheritance */ var seconds = parseInt(this, 10); // don't forget the second param var hours = Math.floor(seconds / 3600); var minutes = Math.floor((seconds - (hours * 3600)) / 60); var seconds = seconds - (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; return time; } alert("5678".toHHMMSS()); // "01:34:38" console.log(timeInSec.toHHMMSS()); //"00:11:01" 

podemos tornar essa function muito mais curta e nítida, mas isso diminui a legibilidade, por isso, vamos escrevê-la da forma mais simples e estável possível.

ou você pode verificar isso funcionando aqui :

Aqui está uma extensão para a class Number. toHHMMSS () converte segundos em uma string hh: mm: ss.

 Number.prototype.toHHMMSS = function() { var hours = Math.floor(this / 3600) < 10 ? ("00" + Math.floor(this / 3600)).slice(-2) : Math.floor(this / 3600); var minutes = ("00" + Math.floor((this % 3600) / 60)).slice(-2); var seconds = ("00" + (this % 3600) % 60).slice(-2); return hours + ":" + minutes + ":" + seconds; } // Usage: [number variable].toHHMMSS(); // Here is a simple test var totalseconds = 1234; document.getElementById("timespan").innerHTML = totalseconds.toHHMMSS(); 
 // HTML of the test 

Fácil de seguir a versão para noobies:

  var totalNumberOfSeconds = YOURNUMBEROFSECONDS; var hours = parseInt( totalNumberOfSeconds / 3600 ); var minutes = parseInt( (totalNumberOfSeconds - (hours * 3600)) / 60 ); var seconds = Math.floor((totalNumberOfSeconds - ((hours * 3600) + (minutes * 60)))); var result = (hours < 10 ? "0" + hours : hours) + ":" + (minutes < 10 ? "0" + minutes : minutes) + ":" + (seconds < 10 ? "0" + seconds : seconds); console.log(result); 

Esta function deve fazer isso:

 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 o separador (padrão):

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

Se você quiser usar - como separador, basta passá-lo como segundo parâmetro:

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

Veja também este violino .

abaixo está o código que irá converter segundos no formato hh-mm-ss:

 var measuredTime = new Date(null); measuredTime.setSeconds(4995); // specify value of SECONDS var MHSTime = measuredTime.toISOString().substr(11, 8); 

Obter o método alternativo de Converter segundos para o formato HH-MM-SS em JavaScript

 var time1 = date1.getTime(); var time2 = date2.getTime(); var totalMilisec = time2 - time1; alert(DateFormat('hh:mm:ss',new Date(totalMilisec))) /* ---------------------------------------------------------- * Field | Full Form | Short Form * -------------|--------------------|----------------------- * Year | yyyy (4 digits) | yy (2 digits) * Month | MMM (abbr.) | MM (2 digits) | NNN (name) | * Day of Month | dd (2 digits) | * Day of Week | EE (name) | E (abbr) * Hour (1-12) | hh (2 digits) | * Minute | mm (2 digits) | * Second | ss (2 digits) | * ---------------------------------------------------------- */ function DateFormat(formatString,date){ if (typeof date=='undefined'){ var DateToFormat=new Date(); } else{ var DateToFormat=date; } var DAY = DateToFormat.getDate(); var DAYidx = DateToFormat.getDay(); var MONTH = DateToFormat.getMonth()+1; var MONTHidx = DateToFormat.getMonth(); var YEAR = DateToFormat.getYear(); var FULL_YEAR = DateToFormat.getFullYear(); var HOUR = DateToFormat.getHours(); var MINUTES = DateToFormat.getMinutes(); var SECONDS = DateToFormat.getSeconds(); var arrMonths = new Array("January","February","March","April","May","June","July","August","September","October","November","December"); var arrDay=new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'); var strMONTH; var strDAY; var strHOUR; var strMINUTES; var strSECONDS; var Separator; if(parseInt(MONTH)< 10 && MONTH.toString().length < 2) strMONTH = "0" + MONTH; else strMONTH=MONTH; if(parseInt(DAY)< 10 && DAY.toString().length < 2) strDAY = "0" + DAY; else strDAY=DAY; if(parseInt(HOUR)< 10 && HOUR.toString().length < 2) strHOUR = "0" + HOUR; else strHOUR=HOUR; if(parseInt(MINUTES)< 10 && MINUTES.toString().length < 2) strMINUTES = "0" + MINUTES; else strMINUTES=MINUTES; if(parseInt(SECONDS)< 10 && SECONDS.toString().length < 2) strSECONDS = "0" + SECONDS; else strSECONDS=SECONDS; switch (formatString){ case "hh:mm:ss": return strHOUR + ':' + strMINUTES + ':' + strSECONDS; break; //More cases to meet your requirements. } } 

Eu só queria dar uma pequena explicação para a boa resposta acima:

 var totalSec = new Date().getTime() / 1000; var hours = parseInt( totalSec / 3600 ) % 24; var minutes = parseInt( totalSec / 60 ) % 60; var seconds = totalSec % 60; var result = (hours < 10 ? "0" + hours : hours) + "-" + (minutes < 10 ? "0" + minutes : minutes) + "-" + (seconds < 10 ? "0" + seconds : seconds); 

Na segunda linha, como há 3600 segundos em 1 hora, dividimos o número total de segundos por 3600 para obter o número total de horas. Usamos parseInt para remover qualquer decimal. Se o totalSec for 12600 (3 horas e meia), então parseInt (totalSec / 3600) retornará 3, pois teremos 3 horas completas. Por que precisamos do% 24 neste caso? Se excedermos 24 horas, digamos que tenhamos 25 horas (90000 segundos), então o módulo aqui nos levará novamente para 1, ao invés de retornar 25. Ele está confinando o resultado em um limite de 24 horas, já que há 24 horas em um dia.

Quando você vê algo assim:

 25 % 24 

Pense nisso assim:

 25 mod 24 or what is the remainder when we divide 25 by 24 

Analisando este segmento antigo – o OP declarou HH: MM: SS, e muitas das soluções funcionam, até você perceber que precisa de mais de 24 horas listadas. E talvez você não queira mais do que uma única linha de código. Aqui está:

 d=(s)=>{f=Math.floor;g=(n)=>('00'+n).slice(-2);return f(s/3600)+':'+g(f(s/60)%60)+':'+g(s%60)} 

Retorna H +: MM: SS. Para usá-lo, basta usar:

 d(91260); // returns "25:21:00" d(960); // returns "0:16:00" 

… Eu tentei usar a menor quantidade de código possível, para uma boa abordagem de uma linha.

Aqui está uma function para converter segundos para o formato hh-mm-ss com base na resposta do powtac aqui

jsfiddle

 /** * Convert seconds to hh-mm-ss format. * @param {number} totalSeconds - the total seconds to convert to hh- mm-ss **/ var SecondsTohhmmss = function(totalSeconds) { var hours = Math.floor(totalSeconds / 3600); var minutes = Math.floor((totalSeconds - (hours * 3600)) / 60); var seconds = totalSeconds - (hours * 3600) - (minutes * 60); // round seconds seconds = Math.round(seconds * 100) / 100 var result = (hours < 10 ? "0" + hours : hours); result += "-" + (minutes < 10 ? "0" + minutes : minutes); result += "-" + (seconds < 10 ? "0" + seconds : seconds); return result; } 

Exemplo de uso

 var seconds = SecondsTohhmmss(70); console.log(seconds); // logs 00-01-10 

Depois de olhar todas as respostas e não estar feliz com a maioria delas, foi isso que eu criei. Eu sei que estou atrasado para a conversa, mas aqui está mesmo assim.

 function secsToTime(secs){ var time = new Date(); // create Date object and set to today's date and time time.setHours(parseInt(secs/3600) % 24); time.setMinutes(parseInt(secs/60) % 60); time.setSeconds(parseInt(secs%60)); time = time.toTimeString().split(" ")[0]; // time.toString() = "HH:mm:ss GMT-0800 (PST)" // time.toString().split(" ") = ["HH:mm:ss", "GMT-0800", "(PST)"] // time.toTimeString().split(" ")[0]; = "HH:mm:ss" return time; } 

Eu crio um novo object Date, altero a hora para meus parâmetros, converto o Date Object em uma string de tempo e removo o material adicional dividindo a string e retornando apenas a parte que precisa.

Eu pensei que eu iria compartilhar essa abordagem, uma vez que elimina a necessidade de acrílico, lógica e acrobacia matemática para obter os resultados no formato “HH: mm: ss”, e em vez disso, baseia-se em methods incorporados.

Você pode querer dar uma olhada na documentação aqui: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date

Há muitas opções para resolver esse problema, e é óbvio que há uma boa opção sugerida, mas quero adicionar mais um código otimizado aqui

 function formatSeconds(sec) { return [(sec / 3600), ((sec % 3600) / 60), ((sec % 3600) % 60)] .map(v => v < 10 ? "0" + parseInt(v) : parseInt(v)) .filter((i, j) => i !== "00" || j > 0) .join(":"); } 

se você não quer zero formatado com menos de 10 números, você pode usar

 function formatSeconds(sec) { return parseInt(sec / 3600) + ':' + parseInt((sec % 3600) / 60) + ':' + parseInt((sec % 3600) % 60); 

}

Exemplo de código http://fiddly.org/1c476/1

Você tentou adicionar segundos a um object Date?

 var dt = new Date(); dt.addSeconds(1234); 

Um exemplo: https://jsfiddle.net/j5g2p0dc/5/

Atualizado: o link de amostra estava ausente, então criei um novo.

Você também pode usar o código abaixo:

 int ss = nDur%60; nDur = nDur/60; int mm = nDur%60; int hh = nDur/60; 

Para qualquer pessoa que use o AngularJS, uma solução simples é filtrar o valor com a API de data , que converte milissegundos em uma string com base no formato solicitado. Exemplo:

 
Offer ends in {{ timeRemaining | date: 'HH:mm:ss' }}

Observe que isso espera milissegundos, portanto você pode querer multiplicar timeRemaining por 1000 se estiver convertendo de segundos (como a pergunta original foi formulada).

Em uma linha, usando a solução de TJ Crowder:

 secToHHMMSS = seconds => `${Math.floor(seconds / 3600)}:${Math.floor((seconds % 3600) / 60)}:${Math.floor((seconds % 3600) % 60)}` 

Em uma linha, outra solução que também conta dias:

 secToDHHMMSS = seconds => `${parseInt(seconds / 86400)}d ${new Date(seconds * 1000).toISOString().substr(11, 8)}` 

Fonte: https://gist.github.com/martinbean/2bf88c446be8048814cf02b2641ba276

Eu usei esse código antes para criar um object simples de tempo:

 function TimeSpan(time) { this.hours = 0; this.minutes = 0; this.seconds = 0; while(time >= 3600) { this.hours++; time -= 3600; } while(time >= 60) { this.minutes++; time -= 60; } this.seconds = time; } var timespan = new Timespan(3662); 

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

resultado 15:08:03

 var sec_to_hms = function(sec){ var min, hours; sec = sec - (min = Math.floor(sec/60))*60; min = min - (hours = Math.floor(min/60))*60; return (hours?hours+':':'') + ((min+'').padStart(2, '0')) + ':'+ ((sec+'').padStart(2, '0')); } alert(sec_to_hms(2442542)); 

Você também pode usar o Sugar .

 Date.create().reset().set({seconds: 180}).format('{mm}:{ss}'); 

Este exemplo retorna ’03: 00 ‘.

usando momentjs para cálculo único

 var number = 10000(milliseconds); var momentObject = moment.duration(number); var output = momentObject.hours()+"HH"+momentObject.minutes()+"MM"+minuteObject.seconds()+"S" 

Usando o Moment.js :

 moment().format('hh:mm:ss');