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?
Respostas:
Você pode usá-lo agora como:
Fragmento de trabalho:
Mostrar snippet de código
fonte
Você pode fazer isso sem nenhuma biblioteca JS externa com a ajuda do método JS Date, como a seguir:
fonte
new Date(1000 * seconds).toISOString().substr(11, 8)
..replace(/^[0:]+/, "")
aftersubstr
para remover todos os zeros e:
desde o início da string.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.)
fonte
var myDate = new Date().toTimeString().replace(/.*(\d{2}:\d{2})(:\d{2}).*/, "$1");
replace
é confuso. Por que não usarnew Date(null, null, null, null, null, timeInSeconds).toTimeString().match(/\d{2}:\d{2}:\d{2}/)[0]
?new Date().toTimeString().split(" ")[0]
Eu recomendo javascript comum, usando o objeto Date:
(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.)
fonte
date.getUTCHours()
edate.getUTCMinutes()
.Uma pesquisa no Google encontrou este resultado :
fonte
secondsToTime(119.9)
=>Object {h: 0, m: 1, s: 60}
. Para corrigir isso, adicionesecs = Math.round(secs);
no início do método. Claro, vimos este bug durante a demo ...Variação sobre um tema. Lida com segundos de um dígito de maneira um pouco diferente
fonte
Aqui está a minha opinião:
Resultados esperados:
fonte
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(':');
second
argumentos. Acho minha versão mais clara, mesmo que seja um pouco mais detalhada.seconds: number
anotações de tipo, em es6?const s = Math.round(seconds % 60);
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:
fonte
Number
está certo, porqueseconds
é, de fato, um número. você deve converter da string antes de usar esta função, que é a coisa certa a fazer!Usando a incrível biblioteca moment.js :
Isso permite especificar qualquer duração, seja horas, minutos, segundos, moinhos e retorna uma versão legível por humanos.
fonte
fonte
new Date().toString().split(" ")[4];
resultado
15:08:03
fonte
new Date(new Date().getTime() - startTime).toUTCString().split(" ")[4]
ondestartTime
foi definido anteriormentestartTime = new Date().getTime();
. (Eu tive que usartoUTCString()
, porque caso contrário, os tempos eram de uma hora fora.)É bem fácil,
fonte
resultado:
fonte
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:
retorna "3d 16:32:12" ou "16:32:12" ou "32:12" ou "12s"
fonte
Eu amei a resposta de Powtac, mas queria usá-la no angular.js, então criei um filtro usando o código dele.
É 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
fonte
Acho que o desempenho é de longe o mais rápido:
fonte
Exemplos
fonte
Math.floor()
nos segundos também, pois eles podem ser dados em decimais. (Aconteceu comigo.)Aqui está mais uma versão, que também lida com dias:
fonte
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.fonte
Aqui está como eu fiz isso. Parece funcionar bastante bem e é extremamente compacto. (Porém, ele usa muitos operadores ternários)
... e para formatar strings ...
fonte
Você pode usar a seguinte função para converter o tempo (em segundos) para o
HH:MM:SS
formato:Sem passar um separador, ele usa
:
como separador (padrão):Se você deseja usar
-
como separador, apenas passe-o como o segundo parâmetro:Demo
Veja também este violino .
fonte
Há um novo método para seqüências de caracteres no bloco: padStart
Aqui está um exemplo de caso de uso: durações do YouTube em 4 linhas de JavaScript
fonte
Foi assim que eu fiz
timeFromSecs (22341938) retornará '258d 14h 5m 38s'
fonte
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).
// imitando a formatação de duração do lado do servidor (.net, C #) como:
fonte
Você pode usar o Momement.js com o plug - in no formato momento-duração :
Veja também este violino
fonte
onde o parâmetro locale ("en", "de" etc.) é opcional
fonte
fonte
Aqui está uma lista atualizada para 2019:
fonte
Date
objeto.Aqui está uma solução bastante simples que arredonda para o segundo mais próximo!
fonte
Escrevi recentemente para MM: SS. Não é exato para a pergunta, mas é um formato de uma linha diferente.
Edit: Isso foi adicionado por variedade, mas a melhor solução aqui é https://stackoverflow.com/a/25279399/639679 abaixo.
fonte