Generate batch accounts with corrupted date

0

Good evening everyone, I'm developing a project in which I generate batch accounts depending on the number of months that the user selects being a maximum of 12 months, ok the CRUD of these accounts, is already working perfectly, I created a for account how many months is the account to be generated and adds +1 month to the due date, the first expiration is legal, but the next dates appear truncated it seems to follow the excerpt of the batch generate code and the display of the records on the screen

CODE SCREEN

    public function gerarLote($meses){

    $conexao = new Conexao();

    $vencer = new DateTime($this->getVenc());

    for ($i=0; $i < $meses; $i++) { 

    $this->insert();

    $vencer->modify('+1 month');

    $this->setVenc($vencer->format("d/m/Y"));

    }

    return true;
}

Display of records on the screen with reference to "JIU MESSAGE"

Thanks in advance for any help

    
asked by anonymous 09.10.2018 / 02:46

1 answer

0

I created this class to use for cases like this one, where we have to manipulate data.

/**
 * Responsavel pela manupulação de datas e horas no sistema.
 * @author Luis Alberto Batista Pedroso <[email protected]>
 * @version 20180730-202911
 */
class Calendario {

    /**
     * Data do calendário.
     * @var DateTime Uma instancia de DateTime.
     */
    private $Data;

    /**
     * Retorna a data do calendário.
     * @return DateTime Uma instancia de DateTime.
     */
    public function getData() {
        return $this->Data;
    }

    /**
     * Define a data do calendário.
     * @param DateTime $data Uma instancia de DateTime.
     */
    public function setData($data) {
        // Zona geografica padrão.
        date_default_timezone_set("America/Sao_Paulo");
        // Criar nova data.
        switch ($data) {
            case is_string($data):
                $timestamp = strtotime($data);
                break;

            case is_object($data) && is_a($data, "DateTime"):
                $timestamp = $data->getTimestamp();
                break;

            default:
                $timestamp = strtotime(date("Y-m-d"));
                break;
        }
        // Definir objeto data.
        $nData = new DateTime();
        $nData->setTimestamp($timestamp);
        // Definir data do objeto.
        $this->Data = $nData;
    }

    /**
     * Inicaliza um objeto da classe Calendario com a Data e hora do sistema no fuso horario Ameri/Sao_Paulo.
     */
    public function __construct() {
        // Zona geografica padrão.
        date_default_timezone_set("America/Sao_Paulo");
        // inicializar data/hora.
        $this->setData(date("Y-m-d H:i:s"));
    }

    /**
     * Retorna o numero de dias de um mês com base em um Mês e Ano informados.
     * @return int Um numero inteiro com o total de dias do mês solicitado.
     */
    public function numeroDiasNoMes() {
        $iMes = (int) $this->Data->format("m");
        $iAno = (int) $this->Data->format("Y");
        return cal_days_in_month(CAL_GREGORIAN, $iMes, $iAno);
    }

    /**
     * Adiciona horas ao horario atual do objeto.
     * @param int $valor Um numero inteiro com a quantidade de horas a adicionar.
     */
    public function adicionarHoras($valor) {
        $nInterval = new DateInterval("PT{$valor}H");
        $this->Data->add($nInterval);
    }

    /**
     * Remover horas do horario atual do objeto.
     * @param int $valor Um numero inteiro com a quantidade de horas a remover.
     */
    public function removerHoras($valor) {
        $nInterval = new DateInterval("PT{$valor}H");
        $this->Data->sub($nInterval);
    }

    /**
     * Adiciona minutos ao horario atual do objeto.
     * @param int $valor Um numero inteiro com a quantidade de minutos a ser adicionado.
     */
    public function adicionarMinutos($valor) {
        $nInterval = new DateInterval("PT{$valor}I");
        $this->Data->add($nInterval);
    }

    /**
     * Remover minutos do horario atual do objeto.
     * @param int $valor Um numero inteiro com a quantidade de minutos a ser removido.
     */
    public function removerMinutos($valor) {
        $nInterval = new DateInterval("PT{$valor}I");
        $this->Data->sub($nInterval);
    }

    /**
     * Adiciona segundos ao horario atual do objeto.
     * @param int $valor Um numero inteiro com a quantidade de segundos a ser adicionado.
     */
    public function adicionarSegundos($valor) {
        $nInterval = new DateInterval("PT{$valor}S");
        $this->Data->add($nInterval);
    }

    /**
     * Remove segundos do horario atual do objeto.
     * @param int $valor Um numero inteiro com a quantidade de segundos a ser removido.
     */
    public function removerSegundos($valor) {
        $nInterval = new DateInterval("PT{$valor}S");
        $this->Data->sub($nInterval);
    }

    /**
     * Adiciona Dias a data atual do objeto.
     * @param int $valor Um numero inteiro com a quantidade de dias a ser adicionado.
     */
    public function adicionarDias($valor) {
        $nInterval = new DateInterval("P{$valor}D");
        $this->Data->add($nInterval);
    }

    /**
     * Remove Dias da data atual do objeto.
     * @param int $valor Um numero inteiro com a quantidade de dias a ser removido.
     */
    public function removerDias($valor) {
        $nInterval = new DateInterval("P{$valor}D");
        $this->Data->sub($nInterval);
    }

    /**
     * Adiciona Meses a data atual do objeto.
     * @param int $valor Um numero inteiro com a quantidade de meses a ser adicionado.
     */
    public function adicionarMeses($valor) {
        $nInterval = new DateInterval("P{$valor}M");
        $this->Data->add($nInterval);
    }

    /**
     * Remove Meses da data atual do objeto.
     * @param int $valor Um numero inteiro com a quantidade de meses a ser removido.
     */
    public function removerMeses($valor) {
        $nInterval = new DateInterval("P{$valor}M");
        $this->Data->sub($nInterval);
    }

    /**
     * Adiciona Anos a data atual do objeto.
     * @param int $valor Um numero inteiro com a quantidade de anos a ser adicionado.
     */
    public function adicionarAnos($valor) {
        $nInterval = new DateInterval("P{$valor}Y");
        $this->Data->add($nInterval);
    }

    /**
     * Remove Anos da data atual do objeto.
     * @param int $valor Um numero inteiro com a quantidade de anos a ser adicionado.
     */
    public function removerAnos($valor) {
        $nInterval = new DateInterval("P{$valor}Y");
        $this->Data->sub($nInterval);
    }

}

Generic usage example:

$meses = 6;

$_DataVenc = new Calendario();
$_DataVenc->setData("2018-10-15");
print($_DataVenc->getData()->format("d/m/Y")."<br>");
// 1º Cadastre a primeira data guardada em _DataVenc...

// Percorra cadastrando as demias...
for($i=0; $i<$meses; $i++) {
    $_DataVenc->adicionarMeses(1);
    print($_DataVenc->getData()->format("d/m/Y")."<br>");
    // Cadastre o novo vencimento guardado em _DataVenc.
}:
  

10/15/2018
  11/15/2018
  12/15/2018
  15/01/2019
  15/02/2019
  03/15/2019
  04/15/2019

    
09.10.2018 / 04:54