Ir para conteúdo

POWERED BY:

Arquivado

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

flahuds

[Resolvido] Problema em loop com data

Recommended Posts

Amigos,

 

Estou com um problema em uma aplicação onde recebo duas datas e retorno os dias entre essas datas. Por exemplo: Se passar as datas 01/05/2007 e 20/08/2007 será retornado todos os dias entre essas datas no padrão d/mm/aaaa. Até aí tudo bem, o código abaixo funciona perfeitamente. O problema é que se no período passado contiver as datas 05/11/2007, 03/11/2008, 01/11/2009, 07/11/2010, 07/11/2011, 05/11/2012 (em cada ano existe um dia do mês de novembro), o período retornado compreendi a data inicial e data final menos um dia.

 

Segue código:

 

PHP
//Monta lista com os valores de dia, mes e ano das variaveis passadas por post

list ($dia1, $mes1, $ano1) = split ('[/.-]', $p_dt_inicio);

list ($dia2, $mes2, $ano2) = split ('[/.-]', $p_dt_fim);

       

//Monta timestamp da data inicial

$inicio=mktime(0, 0, 0, $mes1,$dia1,$ano1);

//Monta timestamp da data final

$fim=mktime(0, 0, 0, $mes2,$dia2,$ano2);

       

//Faz um loop com todos os dias dentro do intervalo passado

for($x=$inicio;$x<=$fim;$x=strtotime("+1 day", $x)){

 

 echo " Data: " . date("d/m/Y",  $x) . "<br>";

 

}

 

Espero que alguém consiga me ajudar, pois já fiz vários testes sem sucesso.

 

Identifiquei que no loop, o cálculo do strtotime está correto, mesmo nas datas que me trazem problema, porém o $x nõ recebe o valor da data final passada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Beraldo,

 

Na execução do código acima me é retornado todos os dias no padrão dd/mm/aaaa entre as datas informadas nas variáveis $p_dt_inicio e $p_dt_fim, incluindo o valor dessas variáveis, porém quando as datas que descrevi acima constam dentro desse intervalo o valor da variável $p_dt_fim não aparece no loop. Se passar duas datas que não contenham as datas problemáticas entre elas o loop funciona corretamente, ou seja, mostra todas as datas de $p_dt_inicio até $p_dt_fim, inclusive.

 

Espero ter conseguido me explicar.

 

Um abraço e obrigado pela disposição em ajudar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bernardo não, Beraldo! http://forum.imasters.com.br/public/style_emoticons/default/natal_mad.gif http://forum.imasters.com.br/public/style_emoticons/default/natal_tongue.gif

hehe

 

 

Eu fiz dois testes aqui e está normal.

Usei estas datas:

PHP
$p_dt_inicio = "05/11/2007";

$p_dt_fim = "01/12/2007";

 

PHP
$p_dt_inicio = "03/11/2008";

$p_dt_fim = "03/12/2008";

 

Ambos geraram a lista correta das datas.

 

 

Poste um exemplo que está dando erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpe Beraldo pelo erro em seu nome.

 

Eu só esqueci de um detalhe: Se a data inicial for um das datas problemáticas o retorno ocorre correto. O problema é se essa data estiver no intervalo entre a data inicial e data final. Se data final for problemática também da problema no retorno.

 

Testem por favor algumas datas como:

 

$p_dt_inicio = "03/11/2007";

$p_dt_fim = "10/11/2007";

 

$p_dt_inicio = "01/11/2008";

$p_dt_fim = "01/12/2008";

 

Observem que a data inicial é anterior as datas com problema, porém as mesmas estão dentro do intervalo passado.

 

Pra mim, se eu passar as datas de exemplo acima retorna:

 

03/11/2007 a 09/11/2007 (Falta $p_dt_fim)

01/11/2008 a 30/11/2008 (Falta $p_dt_fim)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se executar o código que eu disponibilizei aqui no forum acontece o problema. Então não pode ser inteferencia de outro script.

Isso está acontecendo tanto na máquina local quanto no servidor de minha hospedagem. Não tenho idéia do que possa ser.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal, fiz a atualização do PHP para o 5.2.5 e o script funcionou como esperado.

 

Era algum bug do PHP.

 

Valeu pelos testes e pela força. Um abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu uso 5.2.3 e estava tudo certo... :unsure:

 

enfim, problema resolvido.

 

também preciso atualizar meu PHP... estou atrasado... http://forum.imasters.com.br/public/style_emoticons/default/assobiando.gif

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.