PHP: Função para gerar parcelas com dia de vencimento fixo
<? function calcularParcelas($dtVencimento,$nParcelas){ $dataExplode = explode( "/",$dtVencimento ); $dia = $dataExplode[0]; $mes = $dataExplode[1]; $ano = $dataExplode[2]; for ($i=1;$i<=$nParcelas;$i++){ // outra possibilidade // ++$mes; $mes = $mes+1; if ($mes >12){ $mes = 1; // ++$ano; $ano = $ano+1; } echo date( "d/m/Y",mktime(0,0,0,$mes,$dia,$ano))."<br/>"; } } $data = '19/08/2011'; $parcelas = 5; calcularParcelas($data,$parcelas); ?> |
Resultado:
19/09/2011
19/10/2011
19/11/2011
19/12/2011
19/01/2012
Bom dia, parabéns pelo. Estou tendo problemas com minha função e ao pegar a sua vi o mesmo erro, gostaria de sabe se vc já tem alguma correção e/ou como corrigir. Veja o exemplo: coloque o dia de vencimento para o resultado será:
30/09/2011
30/10/2011
30/11/2011
30/01/2012
01/03/2012
Gostaria que o script não pulasse um mês no caso do mes 01 para 03 e sim de 01 para 02 como (29/02/2012).
Bom dia Rodrigo,
não temos nenhuma correção ainda. A função gera os vencimentos com base no dia do vencimento.
Se você definir $data = ’20/10/2011′ e $parcelas = 5 o mês 2 aparece.
O que poderia ser feito é incluir uma outra função que pegasse o último dia de cada mês.
Bom dia, a solução para o problema do dia cair em um mês que não exista dia 30 ou dia, como por exemplo fevereiro está ai:
/*
* @todo Método criado para atender a necessidade de obter uma data válida quando um mês não
* possui dia 30 ou 31, por exemplo:
*
* $data = ToolBox::getDataAnteriorValida(“2015-02-31”);
* $data: 2015-02-28
*
* param: Y-m-d
* return: Y-m-d
*/
function getDataAnteriorValida($data){
$iLoops = 0;
$dataSeparada = explode(“-“, $data);
$dia = $dataSeparada[2];
while(!validaData($data, “Y-m-d”)){
$iLoops++;
$dataSeparada = explode(“-“, $data);
$dia–;
$data = $dataSeparada[‘0’] . “-” . $dataSeparada[‘1’] . “-” . $dia;
if($iLoops > 30){
return false;
}
}
return $data;
}
function validaData($valor, $formato = ‘d/m/Y’)
{
switch ($formato) {
case ‘Y-m-d’:
$data = explode(“-“, $valor);
$d = $data[2];
$m = $data[1];
$y = $data[0];
return checkdate($m, $d, $y);
case ‘d/m/Y’:
$data = explode(“/”, $valor);
$d = $data[0];
$m = $data[1];
$y = $data[2];
return checkdate($m, $d, $y);
case ‘Y-m-d H:i:s’:
$tempo = explode(” “, $valor);
$data = explode(“-“, $tempo[0]);
$hora = explode(“:”, $tempo[1]);
$d = $data[2];
$m = $data[1];
$y = $data[0];
$h = $hora[0];
$i = $hora[1];
$s = $hora[2];
return (checkdate($m, $d, $y) AND self::checktime($h, $i, $s));
default:
throw new Exception(“Formato da data para validação inválido: ‘” . $formato . “‘”);
break;
}
}
pode dar um exemplo de função que pega o ultimo dia de cada mês?
function somaMes($dataInicial, $diaOriginal = null)
{
$datetime = new DateTime($dataInicial);
$month = $datetime->format(‘n’); //sem zeros
$day = $datetime->format(‘j’); //sem zeros
if ($day modify(‘last day of next month’);
} else if ($day == 29 || $day == 30) {
if ($month == 1) {
$datetime->modify(‘last day of next month’);
} else {
$datetime->modify(‘+1 month’);
$dia = $datetime->format(‘j’);
if ($dia modify(‘+’ . $resto . ‘ days’);
}
}
} else {
$datetime->modify(‘+1 month’);
}
return $datetime->format(‘Y-m-d’);
}
somaMes(‘2021-01-31’, 31);
vai retornar 2021-02-28
Olá, me ajude…
Usando PHP+MYSQLi
Preciso de uma ideia ou um tutorial para gerar datas para um cursinho de informática básica.
O aluno faz um contrato de X meses por exemplo. Preciso informar a data inicial e quero que o sistema informe as datas das aulas. Elas são duas ou três vezes por semana. Tipo, toda segunda e quarta ou toda terça e quinta as 14 horas (por exemplo)… até o término do curso.
Se puder dar um norte aí, agradeço. Lembrando que sou apenas um iniciante saindo do mundo Office…rsrs