Tranche maturity by period

Asked

Viewed 135 times

1

The excerpt of the code below displays a simulation of installments, with fixed due date, divided every 30 days!

I’d like to include a salary periodico, for example every 20 days, or 10 in 10, according to the variable $periodicidade.

My code:

<?php
function calcula_parcelas($num_parcelas, $vencimento_primeira_parcela = null){
  if($vencimento_primeira_parcela != null)
  {
    $vencimento_primeira_parcela = explode('/',$vencimento_primeira_parcela);
    $dia = $vencimento_primeira_parcela[0];
    $mes = $vencimento_primeira_parcela[1];
    $ano = $vencimento_primeira_parcela[2];
  }
  else
  {
    $dia = date('d');
    $mes = date('m');
    $ano = date('Y');
  }
  
  $periodicidade = 20;
 
  for($parcela = 0; $parcela < $num_parcelas; $parcela++)
  {
      if ($periodicidade == 30)
          echo date('d/m/Y', strtotime('+'.$parcela. " month", mktime(0, 0, 0, $mes, $dia, $ano))),'<br/>';
      else
          echo date('d/m/Y', strtotime('+'.$parcela. " month", mktime(0, 0, 0, $mes, $periodicidade, $ano))),'<br/>';
  }
}
 
//echo 'Calcula as parcela a partir de hoje<br/>';
//calcula_parcelas(5);
//echo '<br/><br/>';
echo 'Calcula as parcela a partir de uma data informada<br/>';
calcula_parcelas(5, '10/10/2020');

1 answer

3


If you want to stipulate a fixed daily variation between the emission range of your plots this interval should be initially computed in days.
Inform the function calcula_parcelas() the interval in days between the parcels and multiply it by the number of the parcel, recalling that the first parcel is the parcel 0.

  • From the original code I added a new parameter $intervalo whose missing value is 30 days.

  • I removed the variable $periodicidade.

  • I changed the calculation to issue date of installments I went from monthly to daily

  • I removed the marking HTML for easy viewing on the test console.

Take the example:

//Adicionei um novo parâmetro $intervalo representando o número de dias entre cada parcela.
function calcula_parcelas($num_parcelas, $vencimento_primeira_parcela = null, $intervalo=30){
  if($vencimento_primeira_parcela != null)
  {
    $vencimento_primeira_parcela = explode('/',$vencimento_primeira_parcela);
    $dia = $vencimento_primeira_parcela[0];
    $mes = $vencimento_primeira_parcela[1];
    $ano = $vencimento_primeira_parcela[2];
  }
  else
  {
    $dia = date('d');
    $mes = date('m');
    $ano = date('Y');
  }
  
  

  for($parcela = 0; $parcela < $num_parcelas; $parcela++)
  {
     //Ao invés de incrementar a data da parcela mensalmente agora ela é incrementada em um 
     //intervalo de dias informado pelo parâmetro $intervalo
     echo date('d/m/Y', strtotime('+'.($parcela * $intervalo). " day", mktime(0, 0, 0, $mes, $dia, $ano))),PHP_EOL;          
  }
}
 
echo 'Calcula 5 parcelas quinzenais a partir de 10/10/2020.'.PHP_EOL;
calcula_parcelas(5, '10/10/2020',15);
echo PHP_EOL;
echo 'Calcula 24 parcelas a decenais partir de 10/10/2020.'.PHP_EOL;
calcula_parcelas(24, '10/10/2020',10);

Upshot:

Calcula 5 parcelas quinzenais a partir de 10/10/2020.
10/10/2020
25/10/2020
09/11/2020
24/11/2020
09/12/2020

Calcula 24 parcelas a decenais partir de 10/10/2020.
10/10/2020
20/10/2020
30/10/2020
09/11/2020
19/11/2020
29/11/2020
09/12/2020
19/12/2020
29/12/2020
08/01/2021
18/01/2021
28/01/2021
07/02/2021
17/02/2021
27/02/2021
09/03/2021
19/03/2021
29/03/2021
08/04/2021
18/04/2021
28/04/2021
08/05/2021
18/05/2021
28/05/2021

Test the example on Repl.it

  • 1

    Sensational, thank you so much for this!

Browser other questions tagged

You are not signed in. Login or sign up in order to post.