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
javascript
James Moore
fonte
fonte
Respostas:
Para obter o número de minutos completos, divida o número total de segundos por 60 (60 segundos / minuto):
E para obter os segundos restantes, multiplique os minutos completos por 60 e subtraia do total de segundos:
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:
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)
fonte
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);
time
. Se você para a entrada de exemplo -1 segundos, você get -1minute e 59 segundos de volta ...time
? Logicamente uma diferença de tempo é sempre positivovar seconds = time % 60
Outra solução sofisticada:
~~
é uma abreviação deMath.floor
, veja este link para mais informaçõesExperimente on-line
fonte
~~
?Math.floor
, veja este link .time = math.round(time)
à primeira linha para me dar segundos arredondados.Para pessoas que esperam por uma solução rápida, simples e, portanto, curta para formatar segundos em
M:SS
:feito ..
A função aceita qualquer um
Number
(de preferência) ou umString
(2 de conversão de penalidades ", que você pode reduzir pela metade, antecedendo+
na argumentação da chamada de função paras
como em:fmtMSS(+strSeconds)
), representando segundos inteiros positivoss
como argumento.Exemplos:
Demolir:
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).fonte
Math.floor(s)
à última linha para obter resultados mais limpos. Funcionando muito bem de qualquer maneira, obrigado!9
e10
sem modificações adicionais; se você digitou, por exemplo69.25
, a saída seria em1:9
vez de1: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 ...NaN
,+/-Infinity
etc.) 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 ....(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+s
para em+(s|0)
vez deMath.floor(s)
, para não destruir a beleza de não precisar resolver e ligarMath.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 queABS(s)
magnetude é garantido para ser menor do que 60, de modo que o assinou ...PS: PFFT, whoever came up with just 512 char limit for any meaningful comment should be...
Você também pode usar o objeto Date nativo:
Obviamente, esta solução funciona apenas por timeInSeconds menos de 24 horas;)
fonte
date
também pode ser construído comovar date = new Date(timeInSeconds * 1000)
2019 melhor variante
Formato
hh:mm:ss
fonte
seconds
é const. você não pode reatribuir.let
, por exemplo,function display (state) { let seconds = state.seconds; ... }
talvez tenha sido esse o motivo de seu erro?%=
está redesignando esse parâmetro. Apenas useseconds%60
fonte
function secondsToMinutes(time){ return Math.floor(0 / 60)+':'+('0'+Math.floor(0 % 60)).slice(-2); }
0
s portime
, estou correto?function secondsToMinutes(time){ return Math.floor(time / 60) + ':' + ('0' + Math.floor(time % 60)).slice(-2) }
Para adicionar zeros à esquerda, eu faria:
Agradável e curto
fonte
Limpe um revestimento usando o ES6
fonte
Um liner (não funciona com horas):
fonte
Segundos para h: mm: ss
fonte
minutes < 10 ? '0' + minutes : minutes
me explicar , assumindo apenas o conhecimento básico de js?A função a seguir ajudará você a obter dias, horas, minutos e segundos
fonte
if (Days > 0){ ddhhmmss += Days + ' Day '; }
paraif (Days > 0) {ddhhmmss += Days === 1 ? Days + ' Day ' : Days + ' Days '};
dizer1 Day
,2 Days
,3 Days
etc. Semelhante pode ser feito para os outros.Depois de tudo isso, mais uma solução simples:
fonte
time.setSeconds(1);
retornos1 0 1
quando deveria ser0 0 1
.Outra solução, porém muito mais elegante, é a seguinte:
fonte
Para adicionar zeros, eu realmente não vejo a necessidade de ter uma outra função completa, onde você pode simplesmente usar, por exemplo
É 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.
fonte
tente o seguinte: Convertendo segundo para HOURS, MIN e SEC.
fonte
fonte
Se você estiver usando o Moment.js , poderá usar o
Duration
objeto incorporadofonte
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 seconds
emHH:MM:SS
.MATEMÁTICA:
Os cálculos usam:
Math.floor()
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/floor%
operador aritmético (Remainder) - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#RemainderConfira o código abaixo. Os segundos são divididos por
3600
para 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
,04
etc. Isso pode ser feito usandopadStart()
. Isso funciona para strings, portanto, o número deve ser convertido em string usandotoString()
.https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart
CÓDIGO:
fonte
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:
Isso lhe daria o que você precisa também.
fonte
Eu estava pensando em uma maneira mais rápida de fazer isso e é isso que eu vim com
Se queremos converter "tempo" em minutos e segundos, por exemplo:
fonte
Coloque meus dois centavos em:
Então, é isso :
Terá a seguinte saída:
Então você pode imprimi-lo assim:
fonte
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:
Portanto, se você inicializar uma nova data com todos os argumentos como zero até os segundos, receberá:
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.
Em uma linha, seria semelhante a:
Além disso, isso permitiria o suporte intercambiável HH: MM: SS e MM: SS com base no número de segundos. Por exemplo:
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.
Espero que isto ajude.
fonte
fonte
Sugiro outra solução:
fonte
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:
fonte