Ir para conteúdo

POWERED BY:

Arquivado

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

fabiapo

[Resolvido] Cálculo de tempo

Recommended Posts

Pessoal,

 

Preciso desenvolver uma função em PHP onde dado um tempo inicial(timestamp) e um prazo (em minutos), eu preciso calcular o tempo corrido, mas desconsiderando finais de semana e feriados. Desta forma, poderei identificar se o registro está ou não dentro do prazo.

 

Alguém tem algum exemplo deste tipo de função?

 

Outra pergunta: Estou utilizando banco de dados PostgreSQL. Seria melhor calcular em uma funçao postgreSQL ou no próprio PHP, para não sobrecarregar o banco?

 

Muito obrigada!

Compartilhar este post


Link para o post
Compartilhar em outros sites

fabiapo,

 

Um post com finalidade de evidenciar um tópico não é permitido e por isso foi removido, veja as regras do fórum: http://forum.imasters.com.br/index.php?app=core&module=help

 

Regra número 10:

É proibido o post de mensagens com o objetivo de evidenciar o tópico, tornando-o primeiro da lista de tópicos (up), tal como mensagens repetitivas e/ou que não condizem com o assunto do tópico em questão (flood). Tais mensagens serão excluídas e o usuário advertido por MP.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

João,

 

Não quis evidenciar meu tópico.

Simplesmente não fui respondida e questionei se realmente ninguém saberia para contribuir.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Simplesmente não fui respondida e questionei se realmente ninguém saberia para contribuir.

 

Certo, fabiapo:

 

timestamp é uma medida de segundos e seu prazo é em minutos, então você precisa antes de qualquer coisa converter seus minutos para segundos:

 

$inicial = strtotime( '2009-10-01 09:58:00' ); //aqui pegamos o timestamp inicial
$minutos = 14400; //Um dia tem 1440 minutos então aqui temos 10 dias em minutos

/**
* Como timestamp é uma medida de segundos, é necessário multiplicar os minutos
* por 60 para saber quantos segundos tem no prazo estipulado
*/
$segundos = $minutos * 60;

 

Feito isso você precisará somar esses segundos calculados com seu timestamp inicial para saber a data final

 

/**
* A data final é a soma da inicial + os segundos do prazo
*/
$final = $inicial + $segundos;

echo date( 'd/m/Y H:i:s' , $final ); //11/10/2009 09:58:00

 

Porém, apenas somando você não obterá o resultado esperado uma vez que entre a data inicial e a final poderá ter sábados, domingos e feriados, então você precisará verificar dia por dia se não é um fim de semana:

 

$prazo = $final;

for ( $i = $inicial ; $i < $prazo ; $i += 86400 ){
$semana = date( 'w' , $i ); //pegamos o dia da semana

/**
* Se o dia da semana for um sábado ou domingo então aumentamos o prazo em mais 1 dia
* 1 dia tem 86400 segundos
*/
if ( ( $semana == 0 ) || ( $semana == 6 ) ) $prazo += 86400;
}

 

Se o dia da semana for 0 (domingo) ou 6 (sábado) então somamos no prazo o equivalente a um dia em segundos (86400)

 

echo date( 'd/m/Y H:i:s' , $prazo ); //15/10/2009 09:58:00

 

Como pode ver, agora $prazo contém sua data final, já desconsiderado o fim de semana. Para os feriados você poderá fazer a mesma coisa, porém, como o PHP desconhece quais dias são de fato feriado, você precisará ter uma lista com esses dias e incluir no loop.

 

;)

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.