Como tratar último dia em PHP para relatório do dia anterior?

dia anterior primeiro PHP

Para controlar a data em dias uso date e mktime, depois coplemento para virada do mês com explode.

Quando vou trabalhar com um período em dias no PHP costumo usar o seguinte código:

<?php

    $dia = date('d') -1; // Esse menos 1 aqui é para se referir ao dia anterior.
    $mes = date('m'); // O date pega a data atual.
    $ano = date('Y'); // Ele recebe como parâmetro o d, m e Y para dia, mês e ano respectivamente.
    $data = mktime(0,0,0,$mes,$dia,$ano);

// A função mktime() retorna o timestamp Unix dos argumentos informados.    

    $data = date('Y-m-d',$data); // Aqui o date não considera a data atual, mas sim o segundo parâmetro informado com a data definida anteriormente e junta ano, mês e dia para inserir a data no formato mais usado em banco de dados, o formato date original.

?>

Nesse exemplo estou pegando o dia anterior mas poderiam ser 15 ou 90 dias, ou qualquer outra quantidade, bastaria substituir o 1 por esses valores.

Mas se fosse usar em uma rotina assim como está, em que todos os dias tivessem que pegar o dia anterior, na virada do mês provavelmente teria problema, não pela data em si, pois essa já estaria correta, mas pelo dia, mês ou ano que se fosse o primeiro do próximo ciclo ficaria zerado. 

No caso do dia 01/10/21 se fosse usar $dia."/".$mes."/".$ano; ficaria 0/10/21, agora se fosse 01/01/21 ficaria 0/0/22 e não é esse o resultado esperado.

então complemento com explode, assim:

if($dia == 0){ // Vejo se o dia está zerado, no caso de dia primeiro (1 - 1).

    $ultimoDia = explode('-',$data); // Uso explode na data formatada.

    $ano = $ultimoDia[0]; // Insiro a parte referente ao ano na variável respectiva.

    $mes = $ultimoDia[1]; // Faço o mesmo para o mês.

    $dia = $ultimoDia[2]; // Também para o dia.

}

No caso o explode transforma uma string em um array de substring, após fazer a quebra do texto inicial de acordo com um limitador, nesse exemplo o traço "-".

Veja mais em:

Como preencher zero a esquerda em PHP?

Como tratar data em PHP?

Como usar o explode do PHP no JavaScript?

Quer acompanhar as novidade do site?

Leia mais em: ww.php.net/manual/pt_BR/funct...

Como tratar último dia em PHP para relatório do dia anterior?

Última atualização: 2023-02-15