PHP: Função para gerar parcelas com dia de vencimento fixo (melhorado)

Função aprimorada pelo Igor Botani Gonçalves do Estudio Digital, contribuindo com os leitores desse blog.

Detalhes:

– não é obrigatório passar a data.
– se não passar data alguma a função vai contar que o primeiro vencimento é hoje.
– já tem todas as validações possíveis.
– se a primeira parcela é dia 30/01, a segunda será no começo de março e a terceira parcela será 30/03.
– está preparada para ano bissexto.

<?php
function calcularParcelas($nParcelas, $dataPrimeiraParcela = null){
  if($dataPrimeiraParcela != null){
    $dataPrimeiraParcela = explode( "/",$dataPrimeiraParcela);
    $dia = $dataPrimeiraParcela[0];
    $mes = $dataPrimeiraParcela[1];
    $ano = $dataPrimeiraParcela[2];
  } else {
    $dia = date("d");
    $mes = date("m");
    $ano = date("Y");
  }
 
  for($x = 0; $x < $nParcelas; $x++){
    echo date("d/m/Y",strtotime("+".$x." month",mktime(0, 0, 0,$mes,$dia,$ano))),"<br/>";
  }
}
 
echo "Calcula as parcela a partir de hoje<br/>";
calcularParcelas(5);
echo "<br/><br/>";
echo "Calcula as parcela a partir de uma data qualquer<br/>";
calcularParcelas(5, "31/08/2011");
?>

Resultado:

Calcula as parcela a partir de hoje
28/04/2011
28/05/2011
28/06/2011
28/07/2011
28/08/2011

Calcula as parcela a partir de uma data qualquer
31/08/2011
01/10/2011
31/10/2011
01/12/2011
31/12/2011

4 comentários em “PHP: Função para gerar parcelas com dia de vencimento fixo (melhorado)

  • 30 de abril de 2011 em 14:25
    Permalink

    Agora me diga…. eu quero pegar essas parcelas e colocar no Bd, e como faço para tipo pegar $parcela1, $parcela2, $parcela3e assim por diante quantas forem geradas ? eu não queria só imprimir elas e sim armazena-las … valew. aguardo retorno.

    Resposta
  • 21 de agosto de 2015 em 9:14
    Permalink

    Muito bom seu artigo, tenho uma dúvida, como que faço para caso a data seja 31/10/2014 ele gere 30/11/2014, 31/12/2014, 31/01/2015, 28/02/2015, 31/03/2015. Tipo ele geraria a partir de um vencimento que no caso seria 31 ai ele iria calcular e ver os meses que fosse de 30 dias ele jogaria para dia 30 e o mês de fevereiro ele iria colocar para dia 28.

    Resposta

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *