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

<?
function calcularParcelas($dtVencimento,$nParcelas){
 
  $dataExplode = explode( "/",$dtVencimento );
 
  $dia = $dataExplode[0];
  $mes = $dataExplode[1];
  $ano = $dataExplode[2];
 
  for ($i=1;$i<=$nParcelas;$i++){
	// outra possibilidade
        // ++$mes;
        $mes = $mes+1;
        if ($mes >12){
	   $mes = 1;
	   // ++$ano;
           $ano = $ano+1;
	}
	echo date( "d/m/Y",mktime(0,0,0,$mes,$dia,$ano))."<br/>";
  }	
}
$data = '19/08/2011';
$parcelas = 5;
calcularParcelas($data,$parcelas);		
?>

Resultado:

19/09/2011
19/10/2011
19/11/2011
19/12/2011
19/01/2012

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

  • 28 de setembro de 2011 em 10:53
    Permalink

    Bom dia, parabéns pelo. Estou tendo problemas com minha função e ao pegar a sua vi o mesmo erro, gostaria de sabe se vc já tem alguma correção e/ou como corrigir. Veja o exemplo: coloque o dia de vencimento para o resultado será:

    30/09/2011
    30/10/2011
    30/11/2011
    30/01/2012
    01/03/2012

    Gostaria que o script não pulasse um mês no caso do mes 01 para 03 e sim de 01 para 02 como (29/02/2012).

    Resposta
    • 28 de setembro de 2011 em 11:15
      Permalink

      Bom dia Rodrigo,

      não temos nenhuma correção ainda. A função gera os vencimentos com base no dia do vencimento.

      Se você definir $data = ’20/10/2011′ e $parcelas = 5 o mês 2 aparece.

      O que poderia ser feito é incluir uma outra função que pegasse o último dia de cada mês.

      Resposta
  • 4 de novembro de 2015 em 9:07
    Permalink

    Bom dia, a solução para o problema do dia cair em um mês que não exista dia 30 ou dia, como por exemplo fevereiro está ai:

    /*
    * @todo Método criado para atender a necessidade de obter uma data válida quando um mês não
    * possui dia 30 ou 31, por exemplo:
    *
    * $data = ToolBox::getDataAnteriorValida(“2015-02-31”);
    * $data: 2015-02-28
    *
    * param: Y-m-d
    * return: Y-m-d
    */
    function getDataAnteriorValida($data){

    $iLoops = 0;
    $dataSeparada = explode(“-“, $data);
    $dia = $dataSeparada[2];

    while(!validaData($data, “Y-m-d”)){
    $iLoops++;
    $dataSeparada = explode(“-“, $data);

    $dia–;

    $data = $dataSeparada[‘0’] . “-” . $dataSeparada[‘1’] . “-” . $dia;

    if($iLoops > 30){
    return false;
    }
    }

    return $data;
    }
    function validaData($valor, $formato = ‘d/m/Y’)
    {
    switch ($formato) {
    case ‘Y-m-d’:
    $data = explode(“-“, $valor);
    $d = $data[2];
    $m = $data[1];
    $y = $data[0];

    return checkdate($m, $d, $y);
    case ‘d/m/Y’:
    $data = explode(“/”, $valor);
    $d = $data[0];
    $m = $data[1];
    $y = $data[2];

    return checkdate($m, $d, $y);
    case ‘Y-m-d H:i:s’:
    $tempo = explode(” “, $valor);
    $data = explode(“-“, $tempo[0]);
    $hora = explode(“:”, $tempo[1]);

    $d = $data[2];
    $m = $data[1];
    $y = $data[0];

    $h = $hora[0];
    $i = $hora[1];
    $s = $hora[2];
    return (checkdate($m, $d, $y) AND self::checktime($h, $i, $s));
    default:
    throw new Exception(“Formato da data para validação inválido: ‘” . $formato . “‘”);
    break;
    }
    }

    Resposta
  • 26 de abril de 2016 em 13:57
    Permalink

    pode dar um exemplo de função que pega o ultimo dia de cada mês?

    Resposta

Deixe uma resposta

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