Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

eronventer

Sistema de Horários

Recommended Posts

Ae galera!

 

Estou desenvolvendo um sistema de horários, neste sistema teremos trabalhos a serem executados.

Ele irá funcionar da seguinte maneira:

 

- Ao iniciar um trabalho gravo na tabela tb_trabalhos a data e a hora de inicio. (data_inicio|datetime)

- Este mesmo trabalho pode ser pausado, então gravo na tabela tb_trabalhos_pausas a data e a hora da pausa (data_pausa|datetime).

- Por fim, finalizo este trabalho e gravo na tb_trabalhos a data e hora de finalização (data_termino|datetime).

 

Meu maior problema é fazer o relatório de horas usadas para a executação de um determinado trabalho.

 

Não sei se esta certo meu pensamento, mas eu teria que subtrair data_termino-data_inicio e ainda resgatar todas data_pausa, somar e subtrair pelo resultado de data_termino-data_inicio.

 

Tentei fazer isso utilizando o mktime, mas esta me gerando uns resultados estranhos...

 

$tmp_pau = 0;
$datahora = date("Y-m-d H:i:s");

for ($i=0; $i<$num_pau; $i++) //Pega todos datetime em que o trabalho foi pausado
{
    $arr_pau = mysql_fetch_array($res_pau);
    
    $data_horas = explode(" ", $arr_pau['data']);
    $hora_pausa = explode(":", $data_horas[1]);
    $data_pausa = explode("-", $data_horas[0]);
    $decorridos = mktime($hora_pausa[0], $hora_pausa[1], $hora_pausa[2], $data_pausa[1], $data_pausa[2], $data_pausa[0]);
    
    $tmp_pau += $decorridos;
}
$data_ini = explode(" ", $arr_tar['data_inicio']);
$data_fim = explode(" ", $datahora);

$hr_ini = explode(":", $data_ini[1]);
$hr_fim = explode(":", $data_fim[1]);

$dt_ini = explode("-", $data_ini[0]);
$dt_fim = explode("-", $data_fim[0]);

$time_ini = mktime($hr_ini[0], $hr_ini[1], $hr_ini[2], $dt_ini[1], $dt_ini[2], $dt_ini[0]);
$time_fim = mktime($hr_fim[0], $hr_fim[1], $hr_fim[2], $dt_fim[1], $dt_fim[2], $dt_fim[0]);

$diferenca = ($time_fim-$time_ini)-$tmp_pau;

$hrs = floor($diferenca/3600);
$mts = ceil($diferenca%3600/60);
$sgs = $diferenca%60%3600;

echo "$hrs:$mts:$sgs"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Neste caso, tente trabalhar com TIMESTAMP em vez de DATETIME. Como você te que realizar várias somas, divisões e etc, acaba valendo a pena. O teu código vai ficar mais simples de se fazer e em questão de performance não sei te informar. Somente realizando testes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.