Potrecoo 0 Denunciar post Postado Maio 6, 2015 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
Williams Duarte 431 Denunciar post Postado Maio 6, 2015 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/201530/06/201530/07/201529/08/201528/09/201528/10/2015 http://php.net/manual/en/class.dateperiod.phphttp://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
Kincaid 6 Denunciar post Postado Maio 6, 2015 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
Potrecoo 0 Denunciar post Postado Maio 6, 2015 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
ESerra 744 Denunciar post Postado Maio 6, 2015 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
Kincaid 6 Denunciar post Postado Maio 6, 2015 Dê uma estudada nas funções http://php.net/manual/pt_BR/function.date.php http://php.net/manual/pt_BR/function.strtotime.php E unixtimestamp http://en.wikipedia.org/wiki/Unix_time Sabendo isso você consegue manipular as datas da forma que você quiser de acordo com a regra de negócio... Compartilhar este post Link para o post Compartilhar em outros sites
Potrecoo 0 Denunciar post Postado Maio 6, 2015 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
Williams Duarte 431 Denunciar post Postado Maio 6, 2015 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
Potrecoo 0 Denunciar post Postado Maio 6, 2015 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
Williams Duarte 431 Denunciar post Postado Maio 6, 2015 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