manolegal 12 Denunciar post Postado Setembro 11, 2015 Boa tarde Estou tentando listar a data do dia e 05 dias superiores a esta data. Tentei da seguinte forma mas não funcionou. Se alguém tiver alguma contribuição, agradeço. <td><select name="data" id="data"> <?php $data_atual = date("d/m/Y"); $data_final = date( "d/m/Y", strtotime( "+5 day" ) ); // Data atual +5 dias for ($data_listar = $data_atual; $data_listar <= $data_final; $data_listar++) { ?> <option value="<?php echo $data_listar;?>"> <?php if($data_listar == $_POST['data']){ echo "selected"; } ?> <?php echo $data_listar; ?> </option> <?php } ?> </select></td> Compartilhar este post Link para o post Compartilhar em outros sites
Maykel-ctba 233 Denunciar post Postado Setembro 11, 2015 Se você dá um echo em $data_final, o que mostra? Compartilhar este post Link para o post Compartilhar em outros sites
manolegal 12 Denunciar post Postado Setembro 11, 2015 16/09/2015 Compartilhar este post Link para o post Compartilhar em outros sites
Maykel-ctba 233 Denunciar post Postado Setembro 11, 2015 E não está certo? Se d/m/Y = 11/09/2015, 5 dias adicionados, vira dia 16. Compartilhar este post Link para o post Compartilhar em outros sites
lucasprog 0 Denunciar post Postado Setembro 11, 2015 Essa função strtotime() não conhecia, eu resolveria assim: <td><select name="data" id="data"> <?php $_POST['data'] = '13/09/15'; $d = date( "d"); $m = date("m"); $y = date("y"); //date( "d/m/y", strtotime( "+5 day" ) ); // Data atual +5 dias for($i = 0; $i <= 5; $i++) { $data_listar = $d+$i."/".$m."/".$y; ?> <option value="<?php echo $data_listar;?>" <?php if($data_listar == $_POST['data']){ echo "selected"; } ?> > <?php echo $data_listar;?> </option> <?php } ?> </select> </td> Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Setembro 11, 2015 Sua lógica está certa. O erro é a forma como montou o loop Você pega a data atual e soma uma unidade. Por exemplo: php > var_dump('2015-09-11' + 1 );int(2016) A soma é feita só com 2015, não com a data completa. por isso seu loop não faz o que você quer. Você precisa somar um dia inteiro Há várias formas de fazer isso. Pode usar strtotime(), mktime(), somar 86400 (24 horas em segundos), mas uma forma bem simples seria usar a classe DateTime Compartilhar este post Link para o post Compartilhar em outros sites
manolegal 12 Denunciar post Postado Setembro 11, 2015 Em ambos os casos, o sistema fica processando, e não retorna nada. Compartilhar este post Link para o post Compartilhar em outros sites
manolegal 12 Denunciar post Postado Setembro 11, 2015 Este código estaria correto? $data_final = date( "d/m/Y", strtotime( "+5 day" ) ); // Data atual +5 dias Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Setembro 11, 2015 O strtotime() está correto O que está errado é o loop. A soma dá errado. Veja o exemplo da soma que postei antes Veja um exemplo com DateTime $data = new DateTime(); $final = (new DateTime())->add(new DateInterval('P5D')); while ($data <= $final) { var_dump($data->format('d/m/Y')); $data->add(new DateInterval('P1D')); } Saída: string(10) "11/09/2015"string(10) "12/09/2015"string(10) "13/09/2015"string(10) "14/09/2015"string(10) "15/09/2015"string(10) "16/09/2015" Compartilhar este post Link para o post Compartilhar em outros sites
manolegal 12 Denunciar post Postado Setembro 11, 2015 Deu o seguinte erro: Parse error: syntax error, unexpected T_OBJECT_OPERATOR in /home/ em: $final = (new DateTime())->add(new DateInterval('P5D')); Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Setembro 11, 2015 seu PHP é mais antigo e não permite essa sintaxe. troque essa linha por esta: $final = new DateTime(); $final->add(new DateInterval('P5D')); Compartilhar este post Link para o post Compartilhar em outros sites
manolegal 12 Denunciar post Postado Setembro 13, 2015 Tentei da seguinte forma mas não retorna dados: <td><select name="data" id="data" onfocus="mudacor(this,'yellow')" onblur="mudacor(this,'white')" onkeypress="return handleEnter(this, event)"> <?php $data = new DateTime(); $final = new DateTime(); $final->add(new DateInterval('P5D')); while ($data <= $final) { var_dump($data->format('d/m/Y')); $data->add(new DateInterval('P1D')); } ?> </select></td> Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Setembro 13, 2015 Veja o código fonte gerado pelo seu script. As datas estarão lá. O problema é que você manteve o var_dump que eu usei apenas como exemplo. Troque por um echo com a tag <option> Compartilhar este post Link para o post Compartilhar em outros sites
manolegal 12 Denunciar post Postado Setembro 14, 2015 Beraldo. Obrigado pelo auxílio, e desculpe minha falta de conhecimento. Tentei da seguinte forma: <td><select name="data" id="data" onfocus="mudacor(this,'yellow')" onblur="mudacor(this,'white')" onkeypress="return handleEnter(this, event)"> <?php $data = new DateTime(); $final = new DateTime(); $final->add(new DateInterval('P5D')); while ($data <= $final) { //var_dump($data->format('d/m/Y')); echo "<option value='$data->format('d/m/Y')'>$data->format('d/m/Y')</option>"; $data->add(new DateInterval('P1D')); } ?> </select></td> Porém no option retorna: ('d/m/Y') Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Setembro 14, 2015 Código PHP deve estar fora se string para ser interpretado. Use concatenação echo "<option value='" . $data->format('d/m/Y') . "'>" . $data->format('d/m/Y') . "</option>"; Compartilhar este post Link para o post Compartilhar em outros sites
manolegal 12 Denunciar post Postado Outubro 3, 2015 Funcionou beleza. Obrigado. Compartilhar este post Link para o post Compartilhar em outros sites