Lançamento de receitas mensais
03/03/2024
0
esse código está fazendo lançamentos mensais, porem quando a data inicial é por exemplo dia 31 e o proximo mês não tem esse dia ele pula esse lançamento.
exemplo, 15 lançamentos, data inicial 31-03-2024 :
2025-06-30
2025-05-31
2025-04-30
2025-03-31
2025-02-28
2025-01-31
2024-12-31
2024-11-30
2024-10-31
2024-09-30
2024-08-31
2024-07-31
2024-06-30
2024-05-31
2024-03-31
apenas falta o primeiro lançamento do mês 04, o do próximo ano já é feito corretamente, aqui está o código:
function criarLancamentosMensais($tipolancamento, $descricao, $dataInicial, $valor, $categoria, $recorrente, $numeroDeVezes, $observacoes) {
try {
$conn = ConectarAoBanco();
$stmt = $conn->prepare("INSERT INTO lancamentos (tipo, descricao, datalancamento, valor, categoria, recorrente, observacoes)
VALUES (?, ?, ?, ?, ?, ?, ?)");
$stmt->bind_param("sssssss", $tipolancamento, $descricao, $dataInicial, $valor, $categoria, $recorrente, $observacoes);
$stmt->execute();
$data = new DateTime($dataInicial);
$diaInicial = $data->format('d'); // Salva o dia da data inicial
for ($i = 1; $i <= $numeroDeVezes - 1; $i++) {
$data->modify('+1 month');
$ultimoDiaDoMesAtual = $data->format('t');
$diaDoProximoLancamento = min($diaInicial, $ultimoDiaDoMesAtual);
$dataFormatada = $data->format('Y-m-') . str_pad($diaDoProximoLancamento, 2, '0', STR_PAD_LEFT);
$stmt->bind_param("sssssss", $tipolancamento, $descricao, $dataFormatada, $valor, $categoria, $recorrente, $observacoes);
$stmt->execute();
}
if ($stmt->affected_rows > 0) {
echo "Lançamentos inseridos com sucesso!";
} else {
echo "Erro ao inserir lançamentos!";
}
$stmt->close();
} catch (Exception $e) {
echo json_encode(array('success' => false, 'message' => 'Erro ao inserir lançamentos: ' . $e->getMessage()));
}
}
exemplo, 15 lançamentos, data inicial 31-03-2024 :
2025-06-30
2025-05-31
2025-04-30
2025-03-31
2025-02-28
2025-01-31
2024-12-31
2024-11-30
2024-10-31
2024-09-30
2024-08-31
2024-07-31
2024-06-30
2024-05-31
2024-03-31
apenas falta o primeiro lançamento do mês 04, o do próximo ano já é feito corretamente, aqui está o código:
function criarLancamentosMensais($tipolancamento, $descricao, $dataInicial, $valor, $categoria, $recorrente, $numeroDeVezes, $observacoes) {
try {
$conn = ConectarAoBanco();
$stmt = $conn->prepare("INSERT INTO lancamentos (tipo, descricao, datalancamento, valor, categoria, recorrente, observacoes)
VALUES (?, ?, ?, ?, ?, ?, ?)");
$stmt->bind_param("sssssss", $tipolancamento, $descricao, $dataInicial, $valor, $categoria, $recorrente, $observacoes);
$stmt->execute();
$data = new DateTime($dataInicial);
$diaInicial = $data->format('d'); // Salva o dia da data inicial
for ($i = 1; $i <= $numeroDeVezes - 1; $i++) {
$data->modify('+1 month');
$ultimoDiaDoMesAtual = $data->format('t');
$diaDoProximoLancamento = min($diaInicial, $ultimoDiaDoMesAtual);
$dataFormatada = $data->format('Y-m-') . str_pad($diaDoProximoLancamento, 2, '0', STR_PAD_LEFT);
$stmt->bind_param("sssssss", $tipolancamento, $descricao, $dataFormatada, $valor, $categoria, $recorrente, $observacoes);
$stmt->execute();
}
if ($stmt->affected_rows > 0) {
echo "Lançamentos inseridos com sucesso!";
} else {
echo "Erro ao inserir lançamentos!";
}
$stmt->close();
} catch (Exception $e) {
echo json_encode(array('success' => false, 'message' => 'Erro ao inserir lançamentos: ' . $e->getMessage()));
}
}
Nadiel Paula
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)