Ir para conteúdo

Arquivado

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

maruanbredoff

Problemas com Parcelas

Recommended Posts

Bom dia pessoal. Estou com um problema no meu sistema.
Eu tenho o seguinte Codigo para fazer o calculo das parcelas. Funciona perfeitamente mas tem algumas situações que não resolve como é o caso do mes de fevereiro que tem 28 dias e nos meses que não tem 31 dias. Alguem pode me ajudar seguindo o padrao deste codigo como faria para contornar essa situação?

<?php
while($qtdparcelas >0) {
// realiza a gravação no banco de dados
$data = $ano.'/'.$mes.'/'.$dia;// iguala a data a data da venda
//$sqlinsert ="INSERT INTO contas_receber (idparcelas, parcela, idcliente, idmovimento, vencimento, valor, idsituacao) VALUES (null, '$parcela', '$idcliente', '$idmovimentoprox', '$data', '$valor_parcela','1')";
//mysqli_query($con,$sqlinsert) or die(mysqli_error($con));
$parcela++;
if ($mes<12){
$mes++; }// adiciona +1 a variavel mes
else{
$mes = 1;
$ano++;}
echo $data; ?><br> <?php
}

Tentei fazer desta forma aqui mas não funcionou
 $qtdparcelas=$qtdparcelas-1;// subtrai 1 a variavel parcela
if(($dia=31) && ($mes=4) && ($mes=6) && ($mes=9) && ($mes=11)){
$mes++;
$dia=30;
}
elseif($mes=2 and $dia >28){
$dia=28;
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá maruan, tudo bem? Espero que sim!

 

Pelo que entendi você quer pegar o último dia de cada mês, correto?

Se for isso, basta fazer assim:

$mes = "02";

$ano = "2019";

$ultimoDiaDoMes = date("t", strtotime("{$mes}/01/{$ano}"));

// Lembrando que a função strtotime aceita formato de data no padrão inglês.

// Caso queira no formato padrão, é bom utilizar mktime.

// Material do mktime: https://secure.php.net/manual/pt_BR/function.mktime.php

 

Abraços, Wictor Pamplona.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por evandrozk
      Bom dia, estou com um exercicio que não consigo resolver, gostaria de saber se alguem consegue me ajudar, fazendo da forma mais fácil, utilizando while.
       
      Dado os três valores de entrada:
       Número de parcelas;
       Data Base para cálculo;
       Quantidade de dias entre cada parcela.
      Faça um algoritmo que calcule a data de vencimento de cada parcela.
      Observação 1: Quando ocorrer que a data de vencimento cair em um sábado ou domingo, deve-se incrementar a
      data até que ela alcance um dia útil (segunda a sexta).
      Observação 2: Na internet existem funções que dado uma data para esta função, ela retornará se é sábado ou
      domingo.
      Caso de Testes:
      Entrada:
      3 parcelas;
      11/10/2017
      30 dias
      Saída:
      10/11/2017
      11/12/2017
      10/01/2018
    • Por Daniel Cruz
      Bom dia, Gostaria de saber como faço para inserir o resultado das parcelas no banco de dados..
      Segue o codigo..
       
      <?php
      // DATA PARA A PRIMEIRA PARCELA A PAGAR
      /////////// ANO, MÊS, DIA
      $val = "R$ 180,00";
      $DP = Array(2018, 05, 31);
      // QUANTIDADE DE PARCELAS
      $parcelas = 12;
      // ARRAY PARA AS DATAS
      $data_array = Array($DP[0], $DP[1], $DP[2]);
      $data_array2 = Array($DP[0], $DP[1], $DP[2]);
      // ARMAZENANDO MÊS DA DATA MENOS 1
      $n = $data_array[1]-1;
      $v_i = $n;
      // FOR PRINCIPAL
      for($i = 0; $i < $parcelas; $i++) {
      $v_i++;
      // BASE PARA SOMAR OS MESES
      $v = strtotime ( '+'.$i.' month' , strtotime(implode("-", $data_array))) ;
      $v2 = strtotime ( '+'.$i.' month' , strtotime(implode("-", $data_array2))) ;
      $nd = date ( 'Y-m-d' , $v );
      $nd2 = date ( 'Y-m-d' , $v2 );
      // PEDAÇOS DA DATA DO LAÇO
      $p = explode("-", $nd);
      // ATÉ 12 MÊSES
      if($v_i <= 12) {
      // BASE DO MÊS ATUAL
      $base_mes = date("Y-m-t", strtotime($nd));
      // PEGANDO O ÚLTIMO DIA DO MÊS DO LAÇO
      $forma_data = $p[0].'-'.$v_i.'-01';
      $ultimo_dia_do_mes = date("Y-m-t", strtotime($forma_data));
      $b1 = explode("-", $base_mes); // EXPLODE DO BASE MES
      $b2 = explode("-", $ultimo_dia_do_mes); // EXPLODE DO ULTIMO DIA DO MÊS
      if($b1[2]!=$b2[2]) {
      echo "$val || {$b2[0]}-{$b2[1]}-{$b2[2]}<br>";
      } else {
      echo "$val || {$b1[0]}-{$b1[1]}-{$data_array[2]}<br>";
      }
      }
      // ATÉ 12 MÊSES
      // DE 12 À 24 MESES
      elseif($v_i > 12 && $v_i <= 24) {
      // BASE DO MÊS ATUAL
      $base_mes = date("Y-m-t", strtotime($nd));
      // PEGANDO O ÚLTIMO DIA DO MÊS DO LAÇO
      $forma_data = $p[0].'-'.($v_i-12).'-01';
      $ultimo_dia_do_mes = date("Y-m-t", strtotime($forma_data));
      $b1 = explode("-", $base_mes); // EXPLODE DO BASE MES
      $b2 = explode("-", $ultimo_dia_do_mes); // EXPLODE DO ULTIMO DIA DO MÊS
      if($b1[2]!=$b2[2]) {
      echo "$val || {$b2[0]}-{$b2[1]}-{$b2[2]}<br>";
      } else {
      echo "$val || {$b1[0]}-{$b1[1]}-{$data_array[2]}<br>";
      }
      }
      // DE 12 À 24 MESES
      // DE 24 À 36 MESES
      elseif($v_i > 24 && $v_i <= 36){
      // BASE DO MÊS ATUAL
      $base_mes = date("Y-m-t", strtotime($nd));
      // PEGANDO O ÚLTIMO DIA DO MÊS DO LAÇO
      $forma_data = $p[0].'-'.($v_i-24).'-01';
      $ultimo_dia_do_mes = date("Y-m-t", strtotime($forma_data));
      $b1 = explode("-", $base_mes); // EXPLODE DO BASE MES
      $b2 = explode("-", $ultimo_dia_do_mes); // EXPLODE DO ULTIMO DIA DO MÊS
      if($b1[2]!=$b2[2]) {
      echo "$val || {$b2[0]}-{$b2[1]}-{$b2[2]}<br>";
      } else {
      echo "$val || {$b1[0]}-{$b1[1]}-{$data_array[2]}<br>";
      }
      }
      // DE 24 À 36 MESES
      // DE 36 À 48 MESES
      elseif($v_i > 36 && $v_i <= 48){
      // BASE DO MÊS ATUAL
      $base_mes = date("Y-m-t", strtotime($nd));
      // PEGANDO O ÚLTIMO DIA DO MÊS DO LAÇO
      $forma_data = $p[0].'-'.($v_i-36).'-01';
      $ultimo_dia_do_mes = date("Y-m-t", strtotime($forma_data));
      $b1 = explode("-", $base_mes); // EXPLODE DO BASE MES
      $b2 = explode("-", $ultimo_dia_do_mes); // EXPLODE DO ULTIMO DIA DO MÊS
      if($b1[2]!=$b2[2]) {
      echo "$val || {$b2[0]}-{$b2[1]}-{$b2[2]}<br>";
      } else {
      echo "$val || {$b1[0]}-{$b1[1]}-{$data_array[2]}<br>";
      }
      }
      // DE 36 À 48 MESES
      // DE 48 À 60 MESES
      elseif($v_i > 48 && $v_i <= 60){
      // BASE DO MÊS ATUAL
      $base_mes = date("Y-m-t", strtotime($nd));
      // PEGANDO O ÚLTIMO DIA DO MÊS DO LAÇO
      $forma_data = $p[0].'-'.($v_i-48).'-01';
      $ultimo_dia_do_mes = date("Y-m-t", strtotime($forma_data));
      $b1 = explode("-", $base_mes); // EXPLODE DO BASE MES
      $b2 = explode("-", $ultimo_dia_do_mes); // EXPLODE DO ULTIMO DIA DO MÊS
      if($b1[2]!=$b2[2]) {
      echo "$val || {$b2[0]}-{$b2[1]}-{$b2[2]}<br>";
      } else {
      echo "$val || {$b1[0]}-{$b1[1]}-{$data_array[2]}<br>";
      }
      }
      // DE 48 À 60 MESES
      else {
      } // FIM DO ELSEIF
      } // FIM DO FOR PRINCIPAL
      ?>
    • Por tony_lu
      Ola pessoal, estou integrando o checkout transparente do Pagseguro e me surgiu uma duvida, quero colocar um campo onde o usuario pode colocar o numero de parcelas, mas precisa aparecer os valores, e como vou saber o valor exato das parcelas que tiver juros?!
       
      Vi em algumas lojas virtuais que existe essa opção de aparecer as parcelas com os valores, alguem pode me ajudar?
    • Por dev_aprendiz
      Boa tarde, pessoal! Não sou muito de pedir ajuda em fórum, procuro sempre resolver meus pepinos que aparecem durante o desenvolvimento. Mas, nesse caso em específico, já tentei de tudo e não consegui solução. Estou desenvolvendo um sistema web em PHP e consegui salvar parcelas no banco de dados MySQL.  O problema só está sendo porque independente da data do serviço que eu escolha ou digite no campo de data do formulário, o dia salvo no banco de dados fica 2017-09-19. Ou seja, já tentei salvar a data 2017-08-18, que é hoje, já tentei outras datas para frente e para trás e sempre vai para o banco de dados a mesma coisa 2017-09-19, 2017-10-19, 2017-11-19, etc. Os meses e ano está correto, inclusive quando divido em 6 parcelas ele muda o ano certinho e tudo, o problema está sendo só o dia. Sempre 19. Segue o código que estou usando para gerar as parcelas:
       
      $serviceID = mysqli_insert_id($conn);
              $sql1 = "SELECT id_servico, data_servico,valor_procedimento,qtd_parcelas FROM servico WHERE id_servico = '$serviceID'";
              $query1 = mysqli_query($conn,$sql1);
              while($row = mysqli_fetch_assoc($query1)){    
              $servicoID = $row['id_servico'];
              $dataS = $row['data_servico'];                            
              $valorP = $row['valor_procedimento'];
              $qtdP = $row['qtd_parcelas'];                    
                              
              
              //separando a data do serviço por partes
              date_default_timezone_set('America/Recife');                    
              $partes = explode("-",$dataS);
              $dia = $partes[0];
              $mes = $partes[1];
              $ano = $partes[2];
              //dividindo o valor total do servico pelo número de parcelas
              $valor_parcela = $valorP/$qtdP;                                                
              for($i = 1;$i <= $qtdP;$i++){
                  //incrementando o mês em 1 para a primeira parcela entrar no
                  //mês posterior                        
                  //$data_vencimento = $dia.'-'.($mes+1).'-'.$ano;
                  $data_vencimento = date('Y-m-d',strtotime("+".$i." month",mktime($mes,$dia,$ano)));
                  $sql2 = "INSERT INTO parcelamento(id_servico,valor_parcela,parcela,data_vencimento) VALUES('$servicoID','$valor_parcela','$i','$data_vencimento')";
                  $insert2 = mysqli_query($conn,$sql2);                            
              }
          }
       
      Tentei enviar em anexo imagem do retorno do BD, mas não está aceitando o arquivo. Só consegui enviar copiando e colando aqui.
      '357', '77', '2', '2017-10-19', '108.33', '0', '0'
      '358', '77', '3', '2017-11-19', '108.33', '0', '0'
      '359', '77', '4', '2017-12-19', '108.33', '0', '0'
      '360', '77', '5', '2018-01-19', '108.33', '0', '0'
      '361', '77', '6', '2018-02-19', '108.33', '0', '0'
      '362', '89', '1', '2017-09-19', '183.33', '0', '0'
      '363', '89', '2', '2017-10-19', '183.33', '0', '0'
      '364', '89', '3', '2017-11-19', '183.33', '0', '0'
      '365', '89', '4', '2017-12-19', '183.33', '0', '0'
      '366', '89', '5', '2018-01-19', '183.33', '0', '0'
      '367', '89', '6', '2018-02-19', '183.33', '0', '0'
       
      Ah, só explicando que no código acima o parâmetro de hora do mktime (0,0,0) não coloquei pois estava salvando no BD assim, com o ano 2024 e as datas nada a ver com o que passei no formulário:
       
      '344', '75', '1', '2024-04-08', '133.33', '0', '0'
      '345', '75', '2', '2024-05-08', '133.33', '0', '0'
      '346', '75', '3', '2024-06-08', '133.33', '0', '0'
      '347', '75', '4', '2024-07-08', '133.33', '0', '0'
      '348', '75', '5', '2024-08-08', '133.33', '0', '0'
      '349', '75', '6', '2024-09-08', '133.33', '0', '0'
       
       
      Me perdoem qualquer falha, pois é a primeira vez que peço ajuda em fórum. Fico grata a quem puder me auxiliar.
       

       
    • Por Mactoscohen
      Ola Galera...
      não sei como fazer um plano de amortizações por favor preciso da vossa ajuda
      exemplo:
      N*P      v. Capital       Cap. Divida         v. P/Mes            
      01       80.000            100.000            20.000   
      02        80.000              80.000            20.000      
      03        80.000              60.000            20.000   
      04        80.000              40.000            20.000
      05        80.000              20.000            20.000  
      06        80.000              00.000            00.000
      <?php include_once ("segura.php"); protPagina (); $user_logado = $_SESSION['userID']; ?> <div id="corpo_relatorio"> <table > <tr> <td colspan="8" align="center" bgcolor="#CCCCCC" ><h1>Plano Financeiro</h1></td> </tr> <tr> <td width="226" height="22" align="center" bgcolor="#CCCCCC"><strong>Valor Capitral</strong></td> <td width="327" align="center" bgcolor="#CCCCCC"><strong>Capi. Dívida</strong></td> <td width="105" colspan="2" align="center" bgcolor="#CCCCCC"><strong>V. P/Mes</strong></td> </tr> <?php $sql = mysql_query("SELECT * FROM tb_recibos" ) or die(mysql_error()); $i = 0; while($resultado = mysql_fetch_array($sql)){ $valor_capital =$resultado['valor_capital']; $cap_divida =$resultado['cap_divida']; $valor_mes =$resultado['valor_mes']; ?> <tr class="<?php echo ($i % 2) == 1 ? 'linha_a' : 'linha_b'?>"> <td align="right" ><?php echo number_format($valor_capital,2,",","."); ?></td> <td align="right" ><?php echo number_format($cap_divida,2,",","."); ?></td> <td colspan="2" ><?php echo number_format($valor_mes,2,",","."); ?></td> <?php $i++; } ?> </tr> </table> </div>  
×

Informação importante

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