fabiapo 0 Denunciar post Postado Setembro 29, 2009 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
João Batista Neto 448 Denunciar post Postado Outubro 1, 2009 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
fabiapo 0 Denunciar post Postado Outubro 1, 2009 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
João Batista Neto 448 Denunciar post Postado Outubro 1, 2009 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
fabiapo 0 Denunciar post Postado Outubro 1, 2009 João, Muito obrigada por sua resposta! Vou implementar! Compartilhar este post Link para o post Compartilhar em outros sites