Días hábiles entre dos fechas dadas
PHP
Actualizado el 21 de Mayo del 2017 por Kip (28 códigos) (Publicado el 19 de Noviembre del 2016)
21.541 visualizaciones desde el 19 de Noviembre del 2016
Una función que recibe dos fechas en el formato YYY-mm-dd y retorna un arreglo con los meses y sus respectivos días hábiles, ejemplo de uso:
De esa forma ahora $dias_habiles contiene un array bidimensional, en este ejemplo solo se obtiene un array con un elemento cuyo indice seria el año-mes y cuyo valor es otro array con los días hábiles, cabe recalcar que es posible obtener mas elementos todo depende de las fechas que reciba la funcion:
Ahora bien, con aquel array lo que se podria hacer para obtener el numero total de días hábiles en cada mes o meses entre las dos fechas es usar un foreach e ir mostrando cada indice y usar count() para obtener el total de los días que seria cada valor del indice, algo asi:
Esto te mostraría algo así:
2016-04 | 10 dias
EXTRA
Si crees que no necesitas los numeros de los dias del mes y buscas el numero total de dias hábiles nada mas, puedes colocar como cuarto argumento la cadena 'sum', de esta forma te traera un array como indices el año-mes y como valor de este el total de dias de hábiles de dicho mes, ejemplo:
Te retornara algo asi:
Espero les sirva.
Saludos
1
$dias_habiles = bussiness_days('2016-04-03', '2016-04-15');
De esa forma ahora $dias_habiles contiene un array bidimensional, en este ejemplo solo se obtiene un array con un elemento cuyo indice seria el año-mes y cuyo valor es otro array con los días hábiles, cabe recalcar que es posible obtener mas elementos todo depende de las fechas que reciba la funcion:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Array
(
[2016-04] => Array
(
[0] => 04
[1] => 05
[2] => 06
[3] => 07
[4] => 08
[5] => 11
[6] => 12
[7] => 13
[8] => 14
[9] => 15
)
)
Ahora bien, con aquel array lo que se podria hacer para obtener el numero total de días hábiles en cada mes o meses entre las dos fechas es usar un foreach e ir mostrando cada indice y usar count() para obtener el total de los días que seria cada valor del indice, algo asi:
1
2
3
4
5
foreach ($dias_habiles as $anio_mes => $dias) {
$dias_mes = count($dias);
$mensaje = "{$anio_mes} | {$dias_mes}";
echo ($dias_mes > 1) ? "{$mensaje} dias<br>" : "{$mensaje} dia<br>";
}
Esto te mostraría algo así:
2016-04 | 10 dias
EXTRA
Si crees que no necesitas los numeros de los dias del mes y buscas el numero total de dias hábiles nada mas, puedes colocar como cuarto argumento la cadena 'sum', de esta forma te traera un array como indices el año-mes y como valor de este el total de dias de hábiles de dicho mes, ejemplo:
1
$dias_habiles = bussiness_days('2016-04-03', '2016-04-15', 'SUM');
Te retornara algo asi:
1
2
3
4
Array
(
[2016-04] => 10
)
Espero les sirva.
Saludos
Comentarios sobre la versión: 1.0 (10)
9 $bussiness_days = [ ];
si me ayudaras con eso te lo agradecería mucho
Puedes intentar colocar la linea asi a ver si asi funciona:
$bussiness_days = array();
<?php
$fecha = new DateTime('2017-05-01');
//$fecha = new DateTime();
$fecha->modify('first day of this month');
echo $fecha->format('d');
echo $fecha->format('m');
echo $fecha->format('Y');
echo "<br>";
echo "<br>";
$fecha->modify('last day of this month');
echo $fecha->format('d');
echo $fecha->format('m');
echo $fecha->format('Y');
>?