Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Potrecoo

Calculo de Parcelas

Recommended Posts

Bom dia pessoal...

Estou com um problema com calculos de parcelas do meu sistema...

 

Vamos supor que eu adicione um titulo com data de vencimento para o dia 31/05, e divido ele em 5 parcelas, ficando 31/05, 30/06, 31/07, 31/08, 30/09

Mas as parcelas ficam 31/05, 01/07, 01/08, 01/09, 01/10...

 

Estou usando uma função parecida com essa:

 

Chamando a Função

$data_vencimento = somar_data($data_vencimento, 0, 1, 0);

Função:

function somar_data($data, $dias, $meses, $ano) {
    $data = explode("/", $data);
    $resData = date("d/m/Y", mktime(0, 0, 0, $data[1] + $meses, $data[0] + $dias, $data[2] + $ano));
    return $resData;
}

Alguem poderia me ajudar com isso?? Obrigado desde já...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Neste caso você esta adicionando um mês a data inicial de vencimento, e sucessivamente a cada nova mais um mês

 

Se for adicionar 30 dias, a partir da data do vencimento, também não seria 31/05, 01/07, 01/08, 01/09, 01/10

 

Mas sim:

 

31/05/2015
30/06/2015
30/07/2015
29/08/2015
28/09/2015
28/10/2015

 

http://php.net/manual/en/class.dateperiod.php
http://php.net/manual/en/class.dateinterval.php

$datas = new DatePeriod(new DateTime('2015-05-31'), new DateInterval('P30D'), 5);

foreach($datas as $data) {
	echo $data->format('d/m/Y'),'<br>';
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi bem qual é a dificuldade, você quer criar novas datas a partir

do mês atual sempre no último dia do mês? Então esse código vai dar jeito!

for ($i = 0, $parcelas = 4; $i < $parcelas; $i++) {
    $data = date('t/m/Y', strtotime("+{$i} month"));
    echo "{$data}\n";
}

Output:

31/05/2015
30/06/2015
31/07/2015
31/08/2015

:)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não e @Williams Duarte, o usuário seleciona uma data de vencimento, 31/05/2015 foi um exemplo real que eu tive, mas pode ser qualquer data.

Ou seja, se eu escolher o dia 05/05/2015 para um vencimento e dividir em 5x, as parcelas saem:

05/05
05/06
05/07
05/08
05/09

Compartilhar este post


Link para o post
Compartilhar em outros sites

31/05 e 05/05 são duas situações diferentes, e qual o motivo? Nem todos os meses terão dia 31, nisto você tem duas soluções:

1 - A de mercado, o mês comercial tem 30 dias, o problema disto é que as parcelas não vencerão todas no mesmo dia, dependendo do dia inicial.

2 - A que os bancos usam para alguns produtos, o mês tem 28 dias, o que for feito dia 29/30/31 vira dia 1 do próximo mês.

 

Primeiro você define isto, ai poderemos te apontar a melhor solução.

Compartilhar este post


Link para o post
Compartilhar em outros sites

31/05 e 05/05 são duas situações diferentes, e qual o motivo? Nem todos os meses terão dia 31, nisto você tem duas soluções:

1 - A de mercado, o mês comercial tem 30 dias, o problema disto é que as parcelas não vencerão todas no mesmo dia, dependendo do dia inicial.

2 - A que os bancos usam para alguns produtos, o mês tem 28 dias, o que for feito dia 29/30/31 vira dia 1 do próximo mês.

 

Primeiro você define isto, ai poderemos te apontar a melhor solução.

Vou explicar melhor o que eu preciso...

Eu tenho um software de controle de Contas a Pagar e a Receber...

 

Eu lanço um titulo com a data de vencimento no dia 'x'(variavel) e quero parcelar mensalmente em 'y' (variavel) vezes.

Exemplo:

Vencimento do título: 05/05/2015
nº Parcelas: 5

Saída:

Parcela 1: 05/05/2015
Parcela 2: 05/06/2015
Parcela 3: 05/07/2015
Parcela 4: 05/08/2015
Parcela 5: 05/09/2015

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Vou explicar melhor o que eu preciso...

Ai no caso você quer uma função pronta, ao invés de pegar os links acima e estudar, se reparar bem, postei uma função que faz exatamente o que você quer, basta olhar no manual os parâmetros.

 

 

DateInterval('P1M') //Equivalente a um mês

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Ai no caso você quer uma função pronta, ao invés de pegar os links acima e estudar, se reparar bem, postei uma função que faz exatamente o que você quer, basta olhar no manual os parâmetros.

 

 

DateInterval('P1M') //Equivalente a um mês

Se eu usar esse DateInterval('P1M'), ele vai cair no mesmo lugar onde eu estava, que irá pular para o mes seguinte.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos ao básico, dentro de uma função você manipula as datas da forma que quiser.

 

Como foi mencionado no post #5

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.