Tenho esta hora em 23 hs 59 min 42 seg e este valor 278
Preciso transformar em horas e depois dividir pelo valor
23:59:42 / 278 = 00:05:11
Vi que em node, tem a função new Date(). Mas não entendi como utillizar
Tenho esta hora em 23 hs 59 min 42 seg e este valor 278
Preciso transformar em horas e depois dividir pelo valor
23:59:42 / 278 = 00:05:11
Vi que em node, tem a função new Date(). Mas não entendi como utillizar
Esse número 278 é o que?
É o retorno de uma consulta ao banco
Ah, entendi agora, deve ser horas. Agora que reparei no cálculo que tu colocou.
horas divido por numero e o resultado em horas
Primeiro a gente precisa entender a diferença entre datas/horas e durações. Por exemplo, nas duas frases abaixo:
Na primeira frase, “duas horas” refere-se ao horário (ao momento específico do dia). Na segunda frase, “duas horas” é a duração (uma quantidade de tempo), ela não diz quando a reunião começou ou terminou, só diz quanto tempo ela durou.
O problema é que ambos usam as mesmas palavras (“horas”, “minutos” e "segundos), e ambos podem ser mostrados da mesma forma: um relógio pode mostrar 02:00:00
para indicar o horário das duas horas, e um cronômetro pode mostrar 02:00:00
para indicar que já se passaram duas horas. Mas eles são conceitos diferentes (relacionados, porém distintos).
E por que toda essa introdução? Porque datas/horas e durações são coisas diferentes, e Date
só serve para trabalhar com um deles (datas/horas). No JavaScript não tem uma forma direta de trabalhar com durações (no futuro, se tudo der certo, teremos), então você precisa fazer tudo na mão.
Enfim, no seu caso o que você tem é uma duração, e não uma data. Não faz sentido dividir “duas da tarde” por um número (já dividir uma duração de duas horas por um número faz). Por isso não adianta tentar usar Date
(qualquer “solução” que sugerirem com Date
será gambiarra, mesmo que “funcione”).
No seu caso, uma solução seria obter o total de segundos, fazer a divisão (arredondando) e depois converter de volta para a quantidade de horas, minutos e segundos.
Não está claro qual o formato que você recebe (se é 23 hs 59 min 42 seg
ou 23:59:42
), mas enfim, seria algo assim:
var duracao = '23:59:42';
// separa os valores de cada unidade
var [horas, minutos, segundos] = duracao.split(':').map(v => parseInt(v));
// obtém a duração total em segundos
var totalSegundos = (horas * 3600) + (minutos * 60) + segundos;
// divide por 278, e arredonda
totalSegundos = Math.round(totalSegundos / 278);
// agora extrai a quantidade de horas, minutos e segundos deste total
horas = Math.floor(totalSegundos / 3600);
// desconta o total de horas, assim o que sobra corresponde aos minutos e segundos
totalSegundos %= 3600;
minutos = Math.floor(totalSegundos / 60);
// desconta o total de minutos, assim o que sobra corresponde aos segundos
totalSegundos %= 60;
// retorna o valor com zero à esquerda caso necessário (ex: "2" vira "02")
function pad(v) {
return v.toString().padStart(2, '0');
}
// formata o valor
var duracaoFinal = `${pad(horas)}:${pad(minutos)}:${pad(totalSegundos)}`;
console.log(duracaoFinal); // 00:05:11
Se o formato da duração inicial for outro, ficaria um pouco diferente:
var duracao = '23 hs 59 min 42 seg';
var match = /(\d+) hs (\d+) min (\d+) seg/.exec(duracao);
// separa os valores de cada unidade
var [horas, minutos, segundos] = match.slice(1, 4).map(v => parseInt(v));
// o resto é igual...