Ir para conteúdo

Arquivado

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

ghenschel

Somar dias a uma data dentro de while

Recommended Posts

Olá amantes do PHP :D

 

estou com um problema aqui no sistema que estou fazendo:

 

Pego a data do primeiro vencimento e coloco na primeira parcela e a cada parcela são somados 30 dias à data da parcela anterior, ou se preferirem assim,

data do primeiro vencimento + 30 dias (1ª parcela), +60 dias (2ª parcela), +90 dias (3ª parcela) e assim sucessivamente.

 

segue o código para análise http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

 

$idcli = seguro($_POST['id']);
$valortotal = (float)str_replace(',','.',seguro($_POST['valortotal']));
$numparc = seguro($_POST['numero']);
$vcto = seguro($_POST['vencimento']);
$contador = "0";

if(isset($_POST['submit'])) {
	$valorparcela = $valortotal / $numparc;
	while($contador < $numparc-1) {
		$valor = (int)$valorparcela;
		$contador++;
		$query = "INSERT INTO financeiro VALUES (NULL, '$idcli', '$valor', '$contador', '$vencimento', '$status')";
		$query2 = mysql_query($query) or die(mysql_error());
		if($query2){
			echo "<center><strong>Parcela $contador cadastrada com sucesso!</strong></center><br />";
		} else {
			echo "Erro ao cadastrar parcela";
		}
	}
	$contador++;
	$valor = $valortotal - (int)$valorparcela*($numparc-1);
	$query = "INSERT INTO financeiro VALUES (NULL, '$idcli', '$valor', '$contador', '$vencimento', '$status')";
	$query2 = mysql_query($query) or die(mysql_error());
	if($query2){
		echo "<center><strong>Parcela $contador cadastrada com sucesso!</strong></center><br />";
	} else {
		echo "Erro ao cadastrar parcela";
	}
}

abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

detalhe:

 

data = dd/mm/yyyy

Compartilhar este post


Link para o post
Compartilhar em outros sites

$vencimentos = array();
$numeroParcelas = 5;
$data = '25/05/2009';
$arrayData = explode('/',$data);
for ($i=0; $i<$numeroParcelas; $i++) {
	$vencimentos[$i] = date('d/m/Y',mktime(0,0,0,$arrayData[1],$arrayData[0]+$i*30,$arrayData[2])); 
}

lembrando que não eh muito eficiente fazer a soma de 30 em 30 dias como você comentou, por que existem meses que sao 30 dias outros 31... e isso acaba causando um atraso nas parcelas a longo prazo... o mais eficiente seria

 

 

for ($i=0; $i<$numeroParcelas; $i++) {
	$vencimentos[$i] = date('d/m/Y',mktime(0,0,0,$arrayData[1]+$i,$arrayData[0],$arrayData[2])); 
}

Soma 1 mes a cada parcela.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só que geraria outro problema... Pode acabar colocando dia 31 de fevereiro...

 

O mais correto é somar 30 dias, mas usando uma função de soma de data...

 

function SomarData($data, $dias, $meses = 0, $ano = 0)
{
   /*www.brunogross.com*/
   //passe a data no formato dd/mm/yyyy 
   $data = explode("/", $data);
   $newData = date("d/m/Y", mktime(0, 0, 0, $data[1] + $meses,
	 $data[0] + $dias, $data[2] + $ano) );
   return $newData;
}

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só que geraria outro problema... Pode acabar colocando dia 31 de fevereiro...

 

O mais correto é somar 30 dias, mas usando uma função de soma de data...

 

function SomarData($data, $dias, $meses = 0, $ano = 0)
{
   /*www.brunogross.com*/
   //passe a data no formato dd/mm/yyyy 
   $data = explode("/", $data);
   $newData = date("d/m/Y", mktime(0, 0, 0, $data[1] + $meses,
	 $data[0] + $dias, $data[2] + $ano) );
   return $newData;
}

Carlos Eduardo

 

mktime nao gera datas inexistentes... o q pode acontecer eh ele jogar o vencimento de fevereiro para março.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas se a idéia é fazer uma parcela a cada 30 dias, é assim que tem que ser... se cair em uma data inexistente, ele joga pra frente...

 

Carlos Eduardo

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.