Executando verificação de segurança...
2

AJUDA - MANIPULANDO DATAS EM PHP

Galera seguinte : tenho uma variável $pagamentoDate que recupero de um campo no postgre que vem nesse formato exemplo : 2023-05-01 (o dia tem que ser 01 sempre) preciso criar um while,que percorre dessa data até por exemplo a data atual 2023-08-01 (dia 01 por padrão) porém quando crio esse while simplesmente da um loop infinito, ao invés de parar sempre no ano, e mes atual.

Ajudem eu novamente

Carregando publicação patrocinada...
2

Mas o loop é para ir de 1 em 1 dia?

Seria algo assim:

// primeiro dia do mês atual
$current = strtotime('first day of this month midnight');

// data inicial
$data = strtotime('2023-05-01');
while ($data <= $current) { // enquanto for menor que o primeiro dia do mês atual
    // faz algo com a data (aqui vou só imprimir)
    echo date('Y-m-d', $data). "\n";
    // soma 1 dia
    $data += 24 * 3600;
}

No caso, strotime retorna o timestamp em segundos, por isso para somar 1 dia vc soma a quantidade de segundos que tem em um dia (24 * 3600).

1
2

Pra somar 1 mês, poderia ser assim:

// primeiro dia do mês atual
$current = strtotime('first day of this month midnight');

// data inicial
$data = strtotime('2023-05-01');
while ($data <= $current) { // enquanto for menor que o primeiro dia do mês atual
    // faz algo com a data (aqui vou só imprimir)
    echo date('Y-m-d', $data). "\n";
    // soma 1 mês
    $data = strtotime('+1 month', $data);
}

Consulte a documentação para mais detalhes.


Ou, usando DateTime e DateInterval:

$current = new DateTime('first day of this month midnight');
$periodo = new DateInterval('P1M'); // 1 mês
$data = new DateTime('2023-05-01');
while ($data <= $current) {
    // faz algo com a data...
    echo $data->format('Y-m-d'). "\n";
    // soma 1 mês
    $data->add($periodo);
}

O DateInterval possui um formato mais específico, baseado na norma ISO 8601, como por exemplo P2M10DT5H20S (2 meses, 10 dias, 5 horas e 20 segundos). Consulte a documentação para mais detalhes.