Ir para conteúdo

Arquivado

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

manolegal

Adicionar dias a uma data

Recommended Posts

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

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

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

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

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

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

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. 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

×

Informação importante

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