Estou tendo um requisito semelhante a este: Converter o tempo no formato HH: MM: SS para apenas segundos?
mas em javascript. Tenho visto muitos exemplos de conversão de segundos em formatos diferentes, mas não HH: MM: SS em segundos. Qualquer ajuda seria apreciada.
javascript
time
Sri Reddy
fonte
fonte
DD
dentroHH:MM:DD
?Respostas:
Experimente isto:
fonte
String.prototype.toSeconds = function () { if (!this) return null; var hms = this.split(':'); return (+hms[0]) * 60 * 60 + (+hms[1]) * 60 + (+hms[2] || 0); }
NOTA:|| 0
no final é bom para qualquer implementação deste código - ele evita problemas com uma representação de tempo (ainda válida) de HH: MM (tipo de Chrome = "tempo" as entradas serão geradas neste formato quando segundos = 0).hh:mm
não tenhoseconds
neste caso o que devo modificar ..?var seconds = (+a[0]) * 60 * 60 + (+a[1]) * 60 + (+a[2]);
paravar seconds = (+a[0]) * 60 * 60 + (+a[1]) * 60;
Esta função manipula "HH: MM: SS", bem como "MM: SS" ou "SS".
fonte
Isso pode ser feito de forma bastante resiliente com o seguinte:
Isso ocorre porque cada unidade de tempo dentro das horas, minutos e segundos é um múltiplo de 60 maior do que a unidade menor. O tempo é dividido em componentes de hora, minutos e segundos, e então reduzido para segundos usando o valor acumulado das unidades mais altas multiplicado por 60 à medida que passa por cada unidade.
O
+time
é usado para converter o tempo para um número.Basicamente, acaba fazendo:
(60 * ((60 * HHHH) + MM)) + SS
Se apenas segundos forem passados, o resultado será uma string, para corrigir isso podemos converter todo o resultado para um int:
fonte
HH:MM:SS
perfeitamente com ambosMM:SS
, enquanto a resposta aceita não.'03'.split(':').reduce((acc,time) => (60 * acc) + +time, 0);
falha porque retorna uma string inesperada:'03'.split(':').reduce((acc,time) => (60 * acc) + +time);
Como a função getTime do objeto Date obtém os milissegundos desde 01/01/1970, podemos fazer isso:
fonte
Converta
hh:mm:ss
string em segundos em uma linha. Também permitiu queh:m:s
o formato emm:ss
,m:s
etc.fonte
hh:mm:ss
string em segundos em uma linha. Também permitiuh:m:s
formato emm:ss
,m:s
etc.reverse()
: '00: 01: 11'.split (':'). Reduzir ((val, entrada, i) => val + entrada * (3600 / Math.pow (60, i)), 0 ) === 71mm:ss
não funcione corretamente.experimentar
fonte
O método estático do Javascript resolve
Date.UTC()
o problema:fonte
Aqui está uma forma um pouco mais legível na resposta original aprovada.
fonte
Saída: 1499755980000 (em milissegundos) (1499755980000/1000) (em segundos)
Observação: esta saída calcula o diff de 01/01/1970 12: 0: 0 até agora e precisamos implementar o moment.js
fonte
Esta função também funciona para MM: SS:
fonte
Retirado da solução dada por Paul https://stackoverflow.com/a/45292588/1191101, mas usando a notação de função antiga para que também possa ser usada em outros motores js (por exemplo, java Rhino)
ou apenas este mais legível
fonte
fonte
Você pode fazer isso dinamicamente - caso encontre não apenas: HH: mm: ss, mas também mm: ss, ou mesmo ss sozinho.
fonte