Calcular dias dos meses considerando 30, 31 ano bissxeto

boa tarde!!
Gostaria de pedir uma ajuda em relação a um código. Tenho uma aplicação que calcula a cada lançamento do campo data mais 4 datas com a somatória de 30 (30 dias), porém preciso que respeite os meses, Janeiro com 31, Fevereiro com 29 e assim por diante. Sei que isso dá para fazer com CASE, mas não tenho muita experiencia com programacao. Hoje uso uma variavel que soma 30 na data e salva no campo da tabela e os relatórios busco nestes campos, porém tenho as diferenças de um dia ou até dois. Exemplo: Digito 21/12/2013, para a data2 calculo + 30 dias, para a data3 + 30 dias sobre a data2 e para a data4 + 30 sobre a data3. Mas como disse, tenho que respeitar os meses e não somente os 30 dias. Alguém poderia me ajudar a escrever esta rotina? Obrigado

Use isto em campos data que dará certo:
http://ninguemfez.blogspot.com.br/2011/11/php-somar-ou-subtrair-dias-de-uma-data.html
Se for timestamp use date_add e date_diff:
http://us1.php.net/manual/pt_BR/function.date-add.php
http://us1.php.net/manual/pt_BR/function.date-diff.php

Obrigado Alexandre, mas esta solução soma os valores na integra? Seria mesma coisa que a minha?
if (sc_date_empty({data}) )
{
sc_error_message(“Preecha a data com a data do Documento”);
} else{
{ent2} = sc_date({data}, “aaaa/mm/dd”, "+ ", 30, 0, 0);
{ent3} = sc_date({ent2}, “aaaa/mm/dd”, "+ ", 30, 0, 0);
{ent4} = sc_date({ent3}, “aaaa/mm/dd”, "+ ", 30, 0, 0);
}

Poderia me ajudar a entender melhor?

[]s

Do jeito que passei, por exemplo, há o respeito que você pediu do dia 28 de fevereiro.
Não entendi o que você deseja?
Se cair no dia 29 de fevereiro em ano que não é bissexto ele joga para março.
E se você guardar a data anterior e somar mais 30 dias da tudo certo.
Agora se você não quer sair do mês, tem mensalidade que irá pode ficar com menos de 30 dias.
Ai já cai fora do que você falou.
Tem que colocar alguns comparadores ai.
neste caso vai no google: https://www.google.com.br/search?q=php+calculo+data+vencimento&ie=utf-8&oe=utf-8&rls=org.mozilla:pt-BR:official&client=firefox-a&gfe_rd=ctrl&ei=FYO3Ut-UNYmF8QetioHoAg&gws_rd=cr
Em programação nada se cria, tudo se copia. Dizia um amigo meu.

Obrigado…vou fazer o teste acredito que vai funcionar sim…
sobre a citação de "tudo se copia…"realmente é boa e valida principalmente na nossa área…

abs

boa tarde! Alexandre…fiz o teste mas aparece o seguinte erro:
{ent2} = sc_date({data}, “aaaa/mm/dd”, strtotime(‘1 month’, strtotime(ent2))); ou
{ent2} = sc_date({data}, strtotime(‘1 month’, strtotime(ent2)));

Aparece este erro:
Parse error: syntax error, unexpected ‘;’ in C:\Program Files…

se puder ajudar?!

[]s

Não adiantaria recriar a roda novamente :smiley:

Olha isto é um erro de sintaxe no seu script.
Um ponto e vírgula ( ; ) que esta sobrando ou faltando.

Alexandre,

Enviei e-mail para você pelo seu site, você poderia responder-me !?

Att,

Jocimar

Oi Jocimar,
Estamos voltando das férias hoje.
Há muita coisa para ler nos e-mails.
Já respondi o seu.
Obrigado

{ent2} = sc_date({data}, “aaaa/mm/dd”, strtotime(‘1 month’, strtotime({ent2})));
{ent2} = sc_date({data}, strtotime(‘1 month’, strtotime({ent2})));

tente novamente da forma acima.

Leandro tdo bem?
Fiquei feliz por ter me respondido mais infelizmente continua o mesmo erro! Vou ter que achar alguma alternativa, se puder me acompanhar neste suporte…pois a minha aplicação é simples é de muuita importancia com relacção a este dia que é calculado.
Obrigado mais uma vez…

Tudo Sim :wink:

Testei uma forma aqui e “deu até certo” vamos lá.

Primeira Forma:
{ent2} = sc_date({data}, ‘aaaammdd’, ‘+’, ‘30’, 0, 0);
//Contagem dos 30 dias corretamente

data interna = 20130201

com a soma = 20130303

Segunda Forma:
{ent2} = sc_date({data}, ‘aaaammdd’, ‘+’, ‘1 month’, 0, 0);
//Contagem do mês corretamente com diferença de um dia a mais.

data interna = 20130201

com a soma = 20130302

Veja ai se é do modo esperado, caso não me retorne com a duvida.