Generate batch accounts with corrupted date

Asked

Viewed 30 times

0

Good evening everyone, I am developing a project in which I Charge accounts in batch depending on the amount of months that the user selects being at most 12 months, ok the CRUD of these accounts, already working perfectly, I created a for that counts how many months is to be generated the account and will add +1 Month to the due date, the first maturity is legal, but the next dates appear truncated seems follows the code to generate in batch and the display of records on the screen

EXCERPT FROM THE CODE

    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 MONTHLY PAYMENT"

inserir a descrição da imagem aqui

From now on I appreciate any help

1 answer

0

I created this class to use for cases like this yours, where we have to manipulate date.

/**
 * 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 example of use:

$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.
}:

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

  • I got a little lost where I put it? when I pick up the form data I pick up as datetime? and my get is not so getData() I would have to put inside the parentheses

  • Do I hear getVenc() like this? $this->setVenc(print($_Datavenc->getData()->format("d/m/Y")."<br>"); and instanceLote() $win = new Calendar(); $_Datavenc->setData("2018-10-15"); ?

  • Luiz Alberto left the function gerarLote(); thus public function gerarLote($meses){&#xA;&#xA; $conexao = new Conexao();&#xA;&#xA; $vencer = new Calendario();&#xA;&#xA; $vencer->setData("2020-01-07");&#xA;&#xA; $this->setVenc($vencer->getData()->format("d/m/Y"));&#xA;&#xA; for ($i=0; $i < $meses; $i++) { &#xA;&#xA; $this->insert();&#xA; &#xA; $vencer->adicionarMeses(1);&#xA;&#xA; }&#xA;&#xA; return true;&#xA; }

  • can’t put my formatted code in the comments wanted to put the image also of what Luis Alberto guided

  • of the ERROR I cannot store a Datetime object as a string

  • Is it possible to put image in the comments? very complicated to move here :(

  • Guys, I managed to solve seven format in this way $this->setVenc($vencer->format( Datetime::ISO8601));

Show 2 more comments

Browser other questions tagged

You are not signed in. Login or sign up in order to post.