Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal, por favor estou com uma imensa duvida.
Desenvolvi um carnê para boleto bancario, sendo a data de hoje + 30 dias.
sendo que preciso colocar agora uma caixa de texto para pegar a data de geração + 30.
Por exemplo o boleto com o codigo abaixo, gera HOJE+30. preciso colocar $datavenc + 30.
não consigo de jeito algum. por favor alguem me ajuda ;(
for($i = 0, $meses = 1 ;$i < $parcelas; $i++, $meses++){
$dadosboleto["data_vencimento"] = date("d/m/Y", strtotime("now +".$meses." months"));
a duvida esta justamente abaixo, como posso colocar uma variavel em "NOW", por exemplo $_POST["Data"];, e calcular com o strtotime +30.
Muito obrigado!
$dadosboleto["data_vencimento"] = date("d/m/Y", strtotime("now +".$meses." months"));
Anderson, muito obrigado por estar me ajudando, fiz exatamente que voce falou...
más deu este erro, e nao consigo encontrar o problema....
Parse error: syntax error, unexpected ':'
qual linha, você pode postar como ficou?
Desculpe, na 1º.
Fatal error: Call to undefined method DateTime::createFromFormat() in
Essa função só está disponivel a partir da versão 5.3 do php, nesse caso você vai ter que converter o formato da data para depois poder somar:
list($dia, $mes, $ano) = explode('/', $datavenc);
$datavenc2 = sprintf('%04d-%02d-%02d', $ano, $mes, $dia);
$datavenc = date('d/m/Y', strtotime($datavenc2 . " + 1 month"));Anderson, mais uma vez muito obrigado pela força.
Agora o carnê rodou, o primeiro carnê está com a data certa da $vencarne.
Más os outros carnes estão com a mesma data da $venccarne.
Os outros carne estão com a mesma data do primeiro? no meu exemplo eu sempre somei apenas 1 mês, mas no seu exemplo você soma a váriavel $meses:
list($dia, $mes, $ano) = explode('/', $datavenc);
$datavenc2 = sprintf('%04d-%02d-%02d', $ano, $mes, $dia);
$datavenc = date('d/m/Y', strtotime($datavenc2 . " +$meses month"));Por exemplo, o carne tem 12 boletos.
1 para cada mês do ano.
um exemplo: Vencarne gerado 01/01/2014...
o proximo será
01/02
01/03
01/04..........
então, no primeiro exemplo que eu te passei ele não estava somando a váriavel meses, estava "+1 month", no segundo exemplo que eu te passei (no último post) eu corrigi para "+$meses month", você fez essa alteração? se sim poste o código aqui para análise.
Certo anderson, no primeiro exemplo ele repetiu venccarne em todos os boletos,
o segundo tambem.
$meses = 1;
list($dia, $mes, $ano) = explode('/', $datavenc);
$datavenc2 = sprintf('%04d-%02d-%02d', $ano, $mes, $dia);
$datavenc = date('d/m/Y', strtotime($datavenc2 . " +$meses month"));me parece que a váriavel $meses sempre vai ser 1 neste teu exemplo
Nossa! que erro eu fiz...
segue o correto:
*A variavel meses esta pegando o for
for($i = 0, $meses = 1 ;$i < $parcelas; $i++, $meses++){
list($dia, $mes, $ano) = explode('/', $datavenc);
$datavenc2 = sprintf('%04d-%02d-%02d', $ano, $mes, $dia);
$datavenc = date('d/m/Y', strtotime($datavenc2 . " +meses month"));
}
Anderson, tava tentando fazer assim:
más da erro ;(
$dadosboleto["data_vencimento"] = date("d/m/Y", strtotime("$datavenc +".$meses." months"));qual erro?
Desculpe, me expressei mau!
não da erro, aparece o carne, más a data fica de hoje +30 e não do vencarne.
Qual o nome correto da váriavel? $datavenc ou $vencarne, no exemplo que segue abaixo está funcionando:
$data_inicio = '10/10/2010'; // pode ser hoje: date('d/m/Y'), mas estou supondo que o usuário digita o ínicio
// convertemos o formato da data
list($dia, $mes, $ano) = explode('/', $data_inicio);
$data_inicio_2 = sprintf('%04d-%02d-%02d', $ano, $mes, $dia);
for($meses = 1; $meses <= 12; $meses++) $soma = $meses - 1;
$data_vencimento = date('d/m/Y', strtotime("$data_inicio_2 +$soma months"));
var_dump($data_vencimento);
}Desculpe, a variavel é $venccarne
Ai ai anderson, ainda não pegou! continua repetindo a data da venccarne
hehe, ta uma luta.
então soma a $venccarne,
Vou estabelecar o meu ponto de vista:
logo só precisamos que a váriavel $venccarne seja igual a {$datavenc} + {$meses - 1} meses
dentro do loop de parcelas (sendo $meses o número da a parcela, começando por 1)
list($dia, $mes, $ano) = explode('/', $datavenc);
$venccarne = sprintf('%04d-%02d-%02d', $ano, $mes, $dia);
$soma = $meses - 1;
$venccarne = date('d/m/Y', strtotime("$venccarne +{$soma} month"));Ainda repete =\
dá um echo e posta o que ele mostrou:
echo "Estamos na parcela $meses <br />\n";
echo "Começamos na data $datavenc <br />\n";
list($dia, $mes, $ano) = explode('/', $datavenc);
$venccarne = sprintf('%04d-%02d-%02d', $ano, $mes, $dia);
$soma = $meses - 1;
$venccarne = date('d/m/Y', strtotime("$venccarne +{$soma} months"));
echo "Nesta parcela a data de vencimento é $venccarne";
O correto seria imprimir isso, (no meu exemplo, começando 10/10/2013):
Estamos na parcela 1
Começamos na data 10/10/2013
Nesta parcela a data de vencimento é 10/10/2013
Estamos na parcela 2
Começamos na data 10/10/2013
Nesta parcela a data de vencimento é 10/11/2013
Estamos na parcela 3
Começamos na data 10/10/2013
Nesta parcela a data de vencimento é 10/12/2013
...
Se o número da parcela se repetir o problema está na váriavel $meses
esta vindo assim:
Estamos na parcela 1
Começamos na data 15/04/2014
Nesta parcela a data de vencimento é 30/11/-0001
Estamos na parcela 2
Começamos na data 30/11/-0001
Nesta parcela a data de vencimento é 30/12/-0001
Estamos na parcela 3
Começamos na data 30/12/-0001
Nesta parcela a data de vencimento é 30/01/0000
Ficou assim com a alteração do codigo abaixo:
Estamos na parcela 1
Começamos na data 15/04/2014
Nesta parcela a data de vencimento é 15/04/2014
Estamos na parcela 2
Começamos na data 15/04/2014
Nesta parcela a data de vencimento é 15/05/2014
Estamos na parcela 3
Começamos na data 15/05/2014
Nesta parcela a data de vencimento é 15/07/2014
Estamos na parcela 4
Começamos na data 15/07/2014
Nesta parcela a data de vencimento é 15/10/2014
echo "Estamos na parcela $meses <br />\n";
echo "Começamos na data $venccarne <br />\n";
list($dia, $mes, $ano) = explode('/', $venccarne);
$venccarne = sprintf('%04d-%02d-%02d', $ano, $mes, $dia);
$soma = $meses - 1;
$venccarne = date('d/m/Y', strtotime("$venccarne +{$soma} month"));
echo "Nesta parcela a data de vencimento é $venccarne";No meu exemplo estava assim:
data_vencimento = data_inicio + meses
No seu exemplo está assim
data_vencimento = data_vencimento + meses
é um erro lógico, observe o que está acontecendo:
data_vencimento = '15/04/2014'
1 Parcela
data_vencimento = data_vencimento + 0 meses
logo data_vencimento == '15/04/2014'
2 Parcela
data_vencimento ainda == '15/04/2014'
data_vencimento = data_vencimento + 1 meses
logo data_vencimento == '15/05/2014'
3 Parcela
data_vencimento agora é == '15/05/2014'
data_vencimento = data_vencimento + 2 meses
logo data_vencimento == '15/07/2014'
Você pode usar o objeto DateTime para manipular datas.
Primeiro você tem que criar um objeto de data, por exemplo:
$dataVencimento = DateTime::createFromFormat('d/m/Y', $datavenc);
Agora você pode adicionar 30 dias:
$dataVencimento->add(new DateInterval('P30D'));
Pronto, agora você pode converter para qualquer formato, supondo que você quer converter devolta para d/m/Y
$datavenc = $dataVencimento->format('d/m/Y');