Neste artigo você aprenderá a como obter número de dias entre datas com PHP, uma ação muito importante ao trabalhar com datas!
Fala programador(a), beleza? Bora aprender mais sobre datas em PHP!
Seja na manipulação de dados de eventos, no gerenciamento de reservas ou no cálculo de prazos, muitas vezes somos confrontados com a necessidade de calcular a diferença entre duas datas em PHP.
Felizmente, o PHP fornece algumas funções integradas poderosas que tornam esse processo relativamente direto.
O Básico: DateTime e DateInterval
A classe DateTime do PHP fornece uma maneira orientada a objetos de trabalhar com datas e horas.
Além disso, o PHP fornece a classe DateInterval, que representa uma duração de tempo.
Aqui está um exemplo simples de como você pode calcular a diferença entre duas datas:
<?php $date1 = new DateTime('2023-07-01'); $date2 = new DateTime('2023-07-10'); $interval = $date1->diff($date2); echo $interval->days; ?>
No exemplo acima, primeiro criamos dois objetos DateTime representando as duas datas entre as quais queremos calcular a diferença.
Em seguida, usamos o método diff()
do objeto DateTime para calcular a diferença entre as duas datas.
Isso retorna um objeto DateInterval, do qual pegamos a propriedade days
para obter o número de dias entre as duas datas.
Considerações Sobre Fuso Horário
Se as datas que você está manipulando estão em fusos horários diferentes, você deve levar isso em consideração ao calcular a diferença entre elas.
Felizmente, a classe DateTime do PHP permite que você especifique um fuso horário ao criar um novo objeto DateTime.
<?php $date1 = new DateTime('2023-07-01', new DateTimeZone('America/New_York')); $date2 = new DateTime('2023-07-10', new DateTimeZone('Europe/Paris')); $interval = $date1->diff($date2); echo $interval->days; ?>
Lidando Com Formatos de Data Diferentes
Às vezes, você pode ter que lidar com datas em formatos diferentes. Nesse caso, você pode usar o método createFromFormat()
da classe DateTime para criar um novo objeto DateTime a partir de uma string de data em um formato específico.
<?php $date1 = DateTime::createFromFormat('d/m/Y', '01/07/2023'); $date2 = DateTime::createFromFormat('d/m/Y H:i:s', '10/07/2023 15:00:00'); $interval = $date1->diff($date2); echo $interval->days; ?>
Número de Dias Úteis Entre Duas Datas
Em algumas situações, pode ser necessário calcular o número de dias úteis (ou seja, excluindo sábados e domingos) entre duas datas.
Embora o PHP não forneça uma maneira integrada de fazer isso, você pode conseguir isso com um loop simples.
<?php $date1 = new DateTime('2023-07-01'); $date2 = new DateTime('2023-07-31'); $interval = new DateInterval('P1D'); $dates = new DatePeriod($date1, $interval, $date2); $weekendDays = 0; foreach ($dates as $date) { if ($date->format('N') >= 6) { $weekendDays++; } } $allDays = $date2->diff($date1)->days; $weekDays = $allDays - $weekendDays; echo $weekDays; ?>
Lidando com Dias Feriados
Muitas vezes, para cálculos relacionados ao mundo empresarial e comercial, queremos excluir não apenas os finais de semana, mas também os feriados.
Embora o PHP não forneça uma função integrada para isso, podemos criar a nossa própria:
<?php function isHoliday($date, $holidays) { $formatDate = $date->format('Y-m-d'); if(in_array($formatDate, $holidays)){ return true; } else { return false; } } $holidays = ['2023-07-04', '2023-12-25']; // Definir feriados $date1 = new DateTime('2023-07-01'); $date2 = new DateTime('2023-07-31'); $interval = new DateInterval('P1D'); $dates = new DatePeriod($date1, $interval, $date2); $weekendDays = 0; $holidayDays = 0; foreach ($dates as $date) { if ($date->format('N') >= 6) { $weekendDays++; } if (isHoliday($date, $holidays)) { $holidayDays++; } } $allDays = $date2->diff($date1)->days; $businessDays = $allDays - $weekendDays - $holidayDays; echo $businessDays; ?>
Este código expande o exemplo anterior para contar não apenas os finais de semana, mas também os feriados, que são definidos em um array.
Quer aprender mais sobre programação? Conheça nosso canal no YouTube:
Conclusão
Calcular o número de dias entre duas datas é uma tarefa comum em desenvolvimento PHP, e a linguagem fornece algumas ferramentas poderosas para facilitar essa tarefa.
Independentemente do formato de suas datas, do fuso horário ou se você está interessado em todos os dias ou apenas dias úteis, com as classes DateTime, DateInterval e DatePeriod, você tem controle total sobre a manipulação de datas em PHP.
Está buscando em evoluir como Programador? Confira o nossos cursos de programação.