<?php
function calcularJuros( $valor , $dias , $taxaJuros , $diasSemJuros ) {
if ( $dias > $diasSemJuros ) {
$diasComJuros = $dias - $diasSemJuros ;
$valorComJuros = $valor * pow ( ( 1 + $taxaJuros / 100 ) , ( $diasComJuros / 30 ) ) ; return $valorComJuros ;
}
return $valor ;
}
function gerarParcelas( $dataInicial , $intervalos , $valorTotal , $taxaJuros , $diasSemJuros ) {
$datasParcelas = [ ] ;
$quantidadeParcelas = count ( $intervalos ) ; $valorParcela = $valorTotal / $quantidadeParcelas ;
foreach ( $intervalos as $dias ) {
$dataVencimento = clone $dataInicial ;
$dataVencimento -> modify ( "+{$dias} days" ) ;
$valorParcelaComJuros = calcularJuros( $valorParcela , $dias , $taxaJuros , $diasSemJuros ) ;
$datasParcelas [ ] = [
'data_vencimento' => $dataVencimento ,
'valor_parcela' => $valorParcelaComJuros
] ;
}
return $datasParcelas ;
}
// Exemplo de uso
$dataInicial = new DateTime( '2024-07-06' ) ;
$intervalos = [ 28 , 42 , 56 ] ;
$valorTotal = 1000.00 ;
$taxaJuros = 2 ; // 2% de juros ao mês
$diasSemJuros = 30 ; // Sem juros para os primeiros 30 dias
$parcelas = gerarParcelas( $dataInicial , $intervalos , $valorTotal , $taxaJuros , $diasSemJuros ) ;
foreach ( $parcelas as $parcela ) {
echo "Data de Vencimento: " . $parcela [ 'data_vencimento' ] -> format ( 'Y-m-d' ) . PHP_EOL;
echo "Valor da Parcela: R$ " . number_format ( $parcela [ 'valor_parcela' ] , 2 , ',' , '.' ) . PHP_EOL
; echo "-----------------------" . PHP_EOL;
}
PD9waHAKCmZ1bmN0aW9uIGNhbGN1bGFySnVyb3MoJHZhbG9yLCAkZGlhcywgJHRheGFKdXJvcywgJGRpYXNTZW1KdXJvcykgewogICAgaWYgKCRkaWFzID4gJGRpYXNTZW1KdXJvcykgewogICAgICAgICRkaWFzQ29tSnVyb3MgPSAkZGlhcyAtICRkaWFzU2VtSnVyb3M7CiAgICAgICAgJHZhbG9yQ29tSnVyb3MgPSAkdmFsb3IgKiBwb3coKDEgKyAkdGF4YUp1cm9zIC8gMTAwKSwgKCRkaWFzQ29tSnVyb3MgLyAzMCkpOwogICAgICAgIHJldHVybiAkdmFsb3JDb21KdXJvczsKICAgIH0KICAgIHJldHVybiAkdmFsb3I7Cn0KCmZ1bmN0aW9uIGdlcmFyUGFyY2VsYXMoJGRhdGFJbmljaWFsLCAkaW50ZXJ2YWxvcywgJHZhbG9yVG90YWwsICR0YXhhSnVyb3MsICRkaWFzU2VtSnVyb3MpIHsKICAgICRkYXRhc1BhcmNlbGFzID0gW107CiAgICAkcXVhbnRpZGFkZVBhcmNlbGFzID0gY291bnQoJGludGVydmFsb3MpOwogICAgJHZhbG9yUGFyY2VsYSA9ICR2YWxvclRvdGFsIC8gJHF1YW50aWRhZGVQYXJjZWxhczsKCiAgICBmb3JlYWNoICgkaW50ZXJ2YWxvcyBhcyAkZGlhcykgewogICAgICAgICRkYXRhVmVuY2ltZW50byA9IGNsb25lICRkYXRhSW5pY2lhbDsKICAgICAgICAkZGF0YVZlbmNpbWVudG8tPm1vZGlmeSgiK3skZGlhc30gZGF5cyIpOwogICAgICAgICR2YWxvclBhcmNlbGFDb21KdXJvcyA9IGNhbGN1bGFySnVyb3MoJHZhbG9yUGFyY2VsYSwgJGRpYXMsICR0YXhhSnVyb3MsICRkaWFzU2VtSnVyb3MpOwogICAgICAgICRkYXRhc1BhcmNlbGFzW10gPSBbCiAgICAgICAgICAgICdkYXRhX3ZlbmNpbWVudG8nID0+ICRkYXRhVmVuY2ltZW50bywKICAgICAgICAgICAgJ3ZhbG9yX3BhcmNlbGEnID0+ICR2YWxvclBhcmNlbGFDb21KdXJvcwogICAgICAgIF07CiAgICB9CgogICAgcmV0dXJuICRkYXRhc1BhcmNlbGFzOwp9CgovLyBFeGVtcGxvIGRlIHVzbwokZGF0YUluaWNpYWwgPSBuZXcgRGF0ZVRpbWUoJzIwMjQtMDctMDYnKTsKJGludGVydmFsb3MgPSBbMjgsIDQyLCA1Nl07CiR2YWxvclRvdGFsID0gMTAwMC4wMDsKJHRheGFKdXJvcyA9IDI7IC8vIDIlIGRlIGp1cm9zIGFvIG3DqnMKJGRpYXNTZW1KdXJvcyA9IDMwOyAvLyBTZW0ganVyb3MgcGFyYSBvcyBwcmltZWlyb3MgMzAgZGlhcwoKJHBhcmNlbGFzID0gZ2VyYXJQYXJjZWxhcygkZGF0YUluaWNpYWwsICRpbnRlcnZhbG9zLCAkdmFsb3JUb3RhbCwgJHRheGFKdXJvcywgJGRpYXNTZW1KdXJvcyk7Cgpmb3JlYWNoICgkcGFyY2VsYXMgYXMgJHBhcmNlbGEpIHsKICAgIGVjaG8gIkRhdGEgZGUgVmVuY2ltZW50bzogIiAuICRwYXJjZWxhWydkYXRhX3ZlbmNpbWVudG8nXS0+Zm9ybWF0KCdZLW0tZCcpIC4gUEhQX0VPTDsKICAgIGVjaG8gIlZhbG9yIGRhIFBhcmNlbGE6IFIkICIgLiBudW1iZXJfZm9ybWF0KCRwYXJjZWxhWyd2YWxvcl9wYXJjZWxhJ10sIDIsICcsJywgJy4nKSAuIFBIUF9FT0w7CiAgICBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgLiBQSFBfRU9MOwp9Cg==