/** |
| * IntervaloData class |
| * |
| * English: Using this class, using the method intervaloMeses, you can obtain the starting and ending dates of each month between two specific dates. |
| * |
| * Portuguese: Usando esta classe, especificamente o método intervaloMeses, é possível obter as datas inciais e finais de cada mes contido dentro de intervalo entre duas datas. |
| * |
| * Spanish: Utilizando esta classe, especificamente el método intervaloMeses, si puede obtener las fechas iniciales y finales de cada mes contido en un rango de dos fechas. |
| * |
| * @author Ezequias Lopes |
| * @license MIT |
| */ |
|
|
| class IntervaloData |
| { |
| /** |
| * Retorna a quantidade de meses entre duas datas |
| * |
| * @param [date] $dataInicial |
| * @param [date] $dataFinal |
| * @return $contaMeses |
| */ |
| public function contaMeses($dataInicial, $dataFinal) |
| { |
| $dataInicial = new DateTime($dataInicial); |
| $dataFinal = new DateTime($dataFinal); |
| $contaMeses = 0; |
|
|
| $dataInicial->add(new \DateInterval('P1M')); |
| while ($dataInicial <= $dataFinal) { |
| $contaMeses++; |
| $dataInicial->add(new \DateInterval('P1M')); |
| } |
|
|
| return (int) $contaMeses; |
| } |
|
|
| /** |
| * Retorna uma array contendo a data do primeiro e último dia de um determinado mes |
| * |
| * @param [date] $data |
| * @return $primeiroUltimoDia = array contendo a data do primeiro e último dia de um determinado mes. As datas sao possuem o formato AAAA-MM-DD (YYYY-MM-DD) |
| */ |
| public function primeiroUltimoDia($data) |
| { |
| $primeiroUltimoDia = array(); |
| $primeiroDia = date('Y-m-01', strtotime($data)); |
| $ultimoDia = date('Y-m-t', strtotime($data)); |
| $primeiroUltimoDia[] = $primeiroDia; |
| $primeiroUltimoDia[] = $ultimoDia; |
| return $primeiroUltimoDia; |
| } |
|
|
| /** |
| * Retorna uma array contendo as datas inciais e finais de cada mes entre duas datas |
| * |
| * @param [type] $dataInicial // Starting date // Fecha incial |
| * @param [type] $dataFinal // Ending date // Fecha final |
| * @return $intervaloMeses |
| */ |
| public function intervaloMeses($dataInicial, $dataFinal) |
| { |
| $intervaloMeses = array(); |
| $contaMeses = (int) $this->contaMeses($dataInicial, $dataFinal); |
| $intervaloMeses[0] = $this->primeiroUltimoDia($dataInicial); |
| $dataInicial = new DateTime($dataInicial); |
| for ($i = 1; $i <= $contaMeses; $i++) { |
| $proximoMes = $dataInicial->modify("+1 month"); |
| $intervaloMeses[$i] = $this->primeiroUltimoDia($proximoMes->format('d-m-Y')); |
| } |
| return $intervaloMeses; |
| } |
| } |