Componentes de tempo de retorno com módulo
Pergunta
Alguém faz 20 horas 42 minutos e 16 segundos em um turno, totalizando 74536 segundos. Como faço para obter as horas do número de segundos que a pessoa fez para essa mudança?
20 * 60 * 60 = 72000
42 * 60 = 2520
16 = 16
+ -----
Total = 74536
____________________________
Total % 60 = Seconds (16)
Total % ? = Minutes (42)
Total % ? = Hours (20)
Já tentei 84600; Acontece que quando um número é menor do módulo, ele realmente não é muito útil, e algo que eu vou ter que pegar se alguém só assine por alguns segundos ...
Solução
Você precisa usar o módulo e a divisão:
t = seconds_in_shift;
secs = t % 60;
t /= 60;
mins = t % 60;
t /= 60;
hour = t;
Ou:
secs = ttime % 60;
mins = (ttime / 60) % 60;
hour = ttime / 3600;
Uma outra opção usa o div()
função do padrão c (<stdlib.h>
):
div_t v1 = div(ttime, 60);
div_t v2 = div(v1.quot, 60);
Depois disso, v1.rem
contém os segundos; v2.rem
contém os minutos e v2.quot
contém as horas com base no número de segundos originalmente em ttime
.
Outras dicas
Com base na resposta de Jonathan, acredito que a resposta precisa deve ser essa ...
$total_time = 61000;
$sec = $total_time % 60;
$total_time = ($total_time - $sec) / 60;
$min = $total_time % 60;
$hour = ($total_time - $min) / 60;
echo "$hour hours, $min minutes and $sec seconds";
Mas se o seu servidor tiver o PHP7 instalado, você pode usar o intdiv () função. Uma divisão inteira na qual o restante é descartado.
// $hour = ($total_time - $min) / 60; old code but still works
$hour = intdiv($total_time, 60); // PHP7 and above code