Acrescer Mês e ano em uma data

Prezados,

criei um método PHP para gerar parcelas de um determinado titulo automaticamente, o usuário deve informar a qtd de parcelas e o vencimento da primeira parcela.

sendo que o dia de vencimento do cliente é sempre dia 05.

Ex:

QTD Parcelas - 24
1º Vencimento - 05/06/2013

for ($x = 1; $x <= 24 ; $x++)

{

  preciso que 
  $vencimento = '05/07/2013'  e assim por diante ('05/08/2013', '05/09/2013') até completar o numero de parcelas.

}

Para cada data que ele recebe, realizo o insert no banco com o numero da parcela e vencimento.

Valeu ai!

Bom dia aaguiar
Veja se isso lhe ajuda:

<?php function calcularParcelas($nParcelas, $dataPrimeiraParcela = null){ if($dataPrimeiraParcela != null){ $dataPrimeiraParcela = explode( "/",$dataPrimeiraParcela); $dia = $dataPrimeiraParcela[0]; $mes = $dataPrimeiraParcela[1]; $ano = $dataPrimeiraParcela[2]; } else { $dia = date("d"); $mes = date("m"); $ano = date("Y"); } for($x = 0; $x < $nParcelas; $x++){ echo date("d/m/Y",strtotime("+".$x." month",mktime(0, 0, 0,$mes,$dia,$ano))),"
"; } } echo "Calcula as parcela a partir de hoje
"; calcularParcelas(5); echo "

"; echo "Calcula as parcela a partir de uma data qualquer
"; calcularParcelas(5, "05/05/2013"); ?>

Olá Ticelso,

Foi exatamente o script que eu utilizei, porém ele da erro nas datas!

Que erro?!

O SCRIPT que você colocou foi esse:

Ex:

QTD Parcelas - 24
1º Vencimento - 05/06/2013

for ($x = 1; $x <= 24 ; $x++)

{

  preciso que 
  $vencimento = '05/07/2013'  e assim por diante ('05/08/2013', '05/09/2013') até completar o numero de parcelas.

}

Para cada data que ele recebe, realizo o insert no banco com o numero da parcela e vencimento.

Bom como nosso amigo Jovito já perguntou não vou perguntar novamente.

ticelso,

O script está correto, eu só acrescentaria mais um parâmetro… que identificasse se a data inexistente iria para o próximo mês ou ficaria no último dia do mês.

Exemplo: se você escolher uma data igual ao dia 31 (que só existe em alguns meses), no seu script ele está avançando para o mês subsequente - CORRETO - porém tem clientes que não aceitam duas datas no mesmo mês, então você poderia acrescentar um parâmetro que checasse isso e colocasse a última data válida do mês em questão.

Mas está tudo correto com seu script.

Forte abraço.

Fica ai a dica do colega jovitomelo muito bom.

Consegui resolver Pessoal, valeu pela força!

Legal, parabéns.
Seria de bom senso que você disponibiliza-se o código para ajudar os outros colegas.
Claro se for do seu interesse.

Poxa bacana aaguiar, como você implementou no SC ? Pena que esse código conta apenas os meses e não dos dias, estou estudando-o para ver se o usuário indique a data e o intervalo de cada! Quando descobrir eu posto aqui!

Abração!

http://www.scriptcase.com.br/forum/index.php/topic,1040.msg4131.html#msg4131

Caroline me tira uma dúvida, você colocou em qual evento?

Em linhas gerais…

$CondicaoPagto=“00/30/60/90”;
$ValorPedido=1000.00;
$NumeroNF=12345;
//*************************************

$PARCELAS=explode("/",$CondicaoPagto); // Cria um array pra saber QUANTAS parcelas e QUAL O PERÍODO

$ICOUNT=count($PARCELAS); // DEFINE A QUANTIDADE DE PARCELAS

$HOJE=date(“Y-m-d”); // BUSCA A DATA ATUAL

$ICOUNT=$ICOUNT==0?1:$ICOUNT;

$VLRPARCS=round($ValorPedido/$ICOUNT,2); // CALCULA O VALOR DE CADA PARCELA

$VLRPARC1=round($VLRPARCS+$ValorPedido-($VLRPARCS*$ICOUNT),2); // CALCULA O VALOR DA ÚLTIMA PARCELA TIRANDO OS ARREDONDAMENTOS MENSAIS

for ($i = 0; $i <= ($ICOUNT-1); $i++) {

$VENCIMENTO=sc_date($HOJE,“AAAA-MM-DD”,"+",$PARCELAS[$i],0,0); // ESTABELECE O VENCIMENTO DA PARCELA RELATIVAMENTE A CADA PERÍODO INDEPENDENTEMENTE DE QUAL SEJA

$VLR=$i==0?$VLRPARC1:$VLRPARCS; // ESTABELECE A VARIÁVEL DO VALOR PARA INCLUSÃO NO BANCO

IF ($ICOUNT>1) $NRODOC=$NumeroNF."-".substr(“ABCDEFGHIJKLMNOPQRSTUVWXYZ”,$i,1);
ELSE $NRODOC=$NumeroNF; // CRIA UM NÚMERO AUTOMÁTICO PARA CADA PARCELA, RELATIVAMENTE A NF E UMA LETRA DO ALFABETO

sc_exec_sql(“INSERT INTO contas_receber
(data_conta, data_vencimento, descricao, numero_documento, valor)
VALUES (CURRENT_DATE,’$VENCIMENTO’, ‘Faturamento’,’$NRODOC’, $VLR)”);

}

Mais ou menos isso.

Sugiro você criar uma Biblioteca Pública que poderá ser chamado em Eventos onAfterInsert de qualquer aplicação.

Jovito, quer dizer que se eu quiser dividir em 12x terei que escrever “30/40/60/90/120/150/180/210/240/270/300/330” ?

Exatamente,

Entenda que desta forma o período nem precisa ser igual… pode ser: 5/10/25/67/200

Contanto que cada valor seja o acumulado.

Entendi, eu tenho uma situação de um cliente, que por exemplo comprou um caminhão financiado! No caso é 36 vzs! Sabe como resolveria isso com esse script? Gostei muito dele. Eu tenho um com esse raciocínio de parcelas extensas mas não estou sabendo converter para o SC. É bem mais simples, mas tem essa opção!

Exemplo:

$parcelas = 120;
$data = explode(’-’, ‘06-05-2013’);
$intervalo = 30;
for($i = 0 ;$i < $parcelas; $i++){
echo date(“d-m-Y”, mktime(0, 0, 0, $data[1], $data[0] + $intervalo, $data[2])) , ‘
’;
$data = explode(’-’, date(“d-m-Y”, mktime(0, 0, 0, $data[1], $data[0]+$intervalo, $data[2])));

}

Resultado:
05-06-2013 INICIO
05-07-2013
04-08-2013
. . . .
. . . .
. . . .
15-12-2022
14-01-2023
13-02-2023
15-03-2023 FIM

Tem como me ajudar a implementa-lo ?
Abração.

Quer dizer que se quiser dividir em parcelas iguais com 30 dias, é só multiplicar o número da parcela pela quantidades de dias.
Nota: pode fixar do dia do vencimento ou não.

Fred,

Durante a noite eu posto, agora estou muito ocupado.

Detalhe:

Você deve criar as duas bibliotecas como opções interessantes. Se você tem prazos bastante definidos e longos a primeira é muito interessante, se os prazos são curtos você pode usar a segunda.

A noite eu posto.

Obrigado Jovito, consegui resolver e vou postar para os amigos que usa as parcelas em valores longos, segue:

$parcelas = 10; // Aqui define a quantidade de parcelas … “1 … N”
$data = explode(’-’, ‘06-05-2013’);
$intervalo = 30; // Esse intervalo pode ser 15 em 15 dias, 30 em 30 dias, etc…

for($i = 1 ;$i < $parcelas+1; $i++){

$data = explode('-', date("d-m-Y", mktime(0, 0, 0, $data[1], $data[0]+$intervalo, $data[2])));
    $data_vencimento = date("Y-m-d", mktime(0, 0, 0, $data[1], $data[0] + $intervalo, $data[2])); 

Obs: Inciei o Laço em “$i = 1” pra definir a contagem de cada parcela e atribuir o numero a cada parcela. No insert eu jogo o $i como Parcela número 1, 2, 3 e etc.

Agora posso ter um título com 36 parcelas (n parcelas) , e ainda controlar o intervalo de cada uma!

Se tiver mais ideias para implementar melhor ainda!

Abraço a todos!