Código de PHP - Días hábiles entre dos fechas dadas

Imágen de perfil
Val: 2.325
Plata
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Días hábiles entre dos fechas dadasgráfica de visualizaciones


PHP

Actualizado el 21 de Mayo del 2017 por Kip (28 códigos) (Publicado el 19 de Noviembre del 2016)
21.074 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:

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

Requerimientos

PHP >= 5.3

1.0
estrellaestrellaestrellaestrellaestrella(10)

Actualizado el 6 de Junio del 2017 (Publicado el 19 de Noviembre del 2016)gráfica de visualizaciones de la versión: 1.0
21.075 visualizaciones desde el 19 de Noviembre del 2016
estrellaestrellaestrellaestrellaestrella
estrellaestrellaestrellaestrella
estrellaestrellaestrella
estrellaestrella
estrella

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
 
function bussiness_days($begin_date, $end_date, $type = 'array') {
	$date_1 = date_create($begin_date);
	$date_2 = date_create($end_date);
	if ($date_1 > $date_2) return FALSE;
	$bussiness_days = array();
	while ($date_1 <= $date_2) {
		$day_week = $date_1->format('w');
		if ($day_week > 0 && $day_week < 6) {
			$bussiness_days[$date_1->format('Y-m')][] = $date_1->format('d');
		}
		date_add($date_1, date_interval_create_from_date_string('1 day'));
	}
	if (strtolower($type) === 'sum') {
	    array_map(function($k) use(&$bussiness_days) {
	        $bussiness_days[$k] = count($bussiness_days[$k]);
	    }, array_keys($bussiness_days));
	}
	return $bussiness_days;
}



Comentarios sobre la versión: 1.0 (10)

Imágen de perfil
19 de Noviembre del 2016
estrellaestrellaestrellaestrellaestrella
No ha dejado ningún comentario
Responder
Imágen de perfil
19 de Noviembre del 2016
estrellaestrellaestrellaestrellaestrella
No ha dejado ningún comentario
Responder
Imágen de perfil
20 de Noviembre del 2016
estrellaestrellaestrellaestrellaestrella
No ha dejado ningún comentario
Responder
aleiker
22 de Noviembre del 2016
estrellaestrellaestrellaestrellaestrella
buenas amigo el creo qeu si funciona pero en la parte de la funcion da un error en la linea

9 $bussiness_days = [ ];
si me ayudaras con eso te lo agradecería mucho
Responder
Imágen de perfil
23 de Noviembre del 2016
estrellaestrellaestrellaestrellaestrella
Hola, que tipo de error te da?

Puedes intentar colocar la linea asi a ver si asi funciona:

$bussiness_days = array();
Responder
aleiker
23 de Noviembre del 2016
estrellaestrellaestrellaestrellaestrella
listo amigo de verdad muy agradecido me a servido de mucho con eso adelante bastante el sistema (Y)
Responder
Imágen de perfil
22 de Noviembre del 2016
estrellaestrellaestrellaestrellaestrella
No ha dejado ningún comentario
Responder
Imágen de perfil
14 de Diciembre del 2016
estrellaestrellaestrellaestrellaestrella
Hola amigo, quería consultarte sobre el formateo de fechas segun un rango
Responder
Imágen de perfil
16 de Diciembre del 2016
estrellaestrellaestrellaestrellaestrella
Hola, si es problema del codigo de la función comentalo aqui, si es alguna otra duda puedes ir al FORO de PHP o al CHAT y comentarnos aquello para ayudarte mejor.
Responder
Jefferson Olave
12 de Mayo del 2017
estrellaestrellaestrellaestrellaestrella
Cordial saludo, si quisiera sacar el primer día hábil, incluyendo de manera manual los festivos.. Cómo seria?
<?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');
>?
Responder

Comentar la versión: 1.0

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad

http://lwp-l.com/s3757