PHP

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

6 thoughts on “PHP: Função para gerar parcelas com dia de vencimento fixo

  • Rodrigo Corrêa e Castro

    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
    • 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
  • Rafael Caviquioli

    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
  • FABIANO A ALMEIDA

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

    Resposta
    • Gerson Correia

      function somaMes($dataInicial, $diaOriginal = null)
      {
      $datetime = new DateTime($dataInicial);
      $month = $datetime->format(‘n’); //sem zeros
      $day = $datetime->format(‘j’); //sem zeros

      if ($day modify(‘last day of next month’);
      } else if ($day == 29 || $day == 30) {
      if ($month == 1) {
      $datetime->modify(‘last day of next month’);
      } else {
      $datetime->modify(‘+1 month’);
      $dia = $datetime->format(‘j’);
      if ($dia modify(‘+’ . $resto . ‘ days’);
      }
      }
      } else {
      $datetime->modify(‘+1 month’);
      }
      return $datetime->format(‘Y-m-d’);
      }

      somaMes(‘2021-01-31’, 31);
      vai retornar 2021-02-28

      Resposta
  • Wemerson

    Olá, me ajude…

    Usando PHP+MYSQLi
    Preciso de uma ideia ou um tutorial para gerar datas para um cursinho de informática básica.
    O aluno faz um contrato de X meses por exemplo. Preciso informar a data inicial e quero que o sistema informe as datas das aulas. Elas são duas ou três vezes por semana. Tipo, toda segunda e quarta ou toda terça e quinta as 14 horas (por exemplo)… até o término do curso.
    Se puder dar um norte aí, agradeço. Lembrando que sou apenas um iniciante saindo do mundo Office…rsrs

    Resposta

Deixe um comentário

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