ghenschel 0 Denunciar post Postado Maio 27, 2009 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
ghenschel 0 Denunciar post Postado Maio 27, 2009 detalhe: data = dd/mm/yyyy Compartilhar este post Link para o post Compartilhar em outros sites
Will Fernando 2 Denunciar post Postado Maio 27, 2009 de uma olhada nesse topico ... tem uma solucao boa do beraldo .. e tambem tem uma minha so que eh mais trabalhosa ^^ http://forum.imasters.com.br/index.php...aded&start= valww espero ter ajudado Compartilhar este post Link para o post Compartilhar em outros sites
stack 0 Denunciar post Postado Maio 27, 2009 $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
Matias Rezende 50 Denunciar post Postado Maio 27, 2009 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
stack 0 Denunciar post Postado Maio 27, 2009 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
Matias Rezende 50 Denunciar post Postado Maio 27, 2009 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