Hola isisunicornio,
Para contrarrestar la "dureza" de pateketrueke (sin ánimo ofender), vamos a facilitar las cosas al máximo, pero estudia la función para que la entiendas y sepas lo que hace:
Código PHP:
Ver original//$fecha_inicio = "2015-09-01"; // En formato aaaa-mm-dd
//$fecha_fin = "2016-06-30"; // En formato aaaa-mm-dd
$fecha_inicio = "01-09-2015"; // En formato dd-mm-aaaa
$fecha_fin = "30-06-2016"; // En formato dd-mm-aaaa
//Array de festivos a tener en cuenta sin contar sábados ni domingos
//Este array puede ser obtenido de una base de datos o completado a mano como aquí
//Completar con los días festivos del período, sin contar sábados ni domingos
'12-10-2015', // Día de la Virgen del Pilar o día de la Hispanidad
'01-11-2015', // Día de Todos los Santos (festivo religioso)
'02-11-2015', // Día de Todos los Santos (cambiado del domingo) (festivo religioso)
'07-12-2015', // Día de la Constitución (pasado del domingo)
'08-12-2015', // Inmaculada Concepción de la Virgen (festivo religioso)
'24-12-2015', // Vacaciones de navidad
'25-12-2015', // Natividad del Señor (festivo religioso) (irrenunciable)
'28-12-2015', // Vacaciones de navidad
'29-12-2015', // Vacaciones de navidad
'30-12-2015', // Vacaciones de navidad
'31-12-2015', // Vacaciones de navidad
'01-01-2016', // Año Nuevo (irrenunciable)
'04-01-2016', // Vacaciones de navidad
'05-01-2016', // Vacaciones de navidad
'06-01-2016', // Día de Reyes (irrenunciable)
'07-01-2016', // Vacaciones de navidad
'08-01-2016', // Vacaciones de navidad
'29-01-2016', // San Valero (festivo en Zaragoza capital)
'04-03-2016', // Cincomarzada (pasada del sábado)
'24-03-2016', // Jueves Santo (irrenunciable)
'25-03-2016', // Viernes Santo (irrenunciable)
'28-03-2016', // Vacaciones Semana Santa
'29-03-2016', // Vacaciones Semana Santa
'30-03-2016', // Vacaciones Semana Santa
'31-03-2016', // Vacaciones Semana Santa
'01-04-2016', // Vacaciones Semana Santa
'22-04-2016', // Día de San Jorge (pasado del sábado)
'02-05-2016' // Día del trabajador (pasado del domingo)
);
//Esta función devuelve los días laborables entre dos fechas pasadas como parámetros
//siendo el tercer parámetro un array con las fechas de los días festivos a tener en
//cuenta para los fines en que se va a utilizar la función
function diasLaborables($fecha_inicio, $fecha_fin, $festivos) {
//El tercer parámetro que recibe esta función está tratado como un array, por lo que debe serlo
$fecha_comienzo = new DateTime( $fecha_inicio ); //inicia
$fecha_finalizacion = new DateTime( $fecha_fin ); //termina
$intervalo = new DateInterval('P1D'); // intervalo de un día
$rango = new DatePeriod($fecha_comienzo, $intervalo ,$fecha_finalizacion); //creamos rango de fechas
$dias_laborables = array(); foreach($rango as $date){
//Se considera el fin de semana y los festivos como no hábiles
if($date->format("N") <6 AND
!in_array($date->format("d-m-Y"),$festivos)) //$dias_laborables[] = $date->format("Y-m-d"); // se asignan fechas validas, devueltas en formato aaaa-mm-dd
$dias_laborables[] = $date->format("d-m-Y"); // se asignan fechas validas, devueltas en formato dd-mm-aaaa
}
return count($dias_laborables); }
//uso: echo diasLaborables($fecha_inicio, $fecha_fin, $festivos);
//Devuelve un número que son los días laborables entre las dos fechas dadas
La base para esta función la obtuve de Internet, creo que de estos mismos foros, pero como realmente no recuerdo de donde, no puedo poner los créditos correspondientes, si alguien lo sabe y lo añade, sería perfecto.
En este caso los festivos están colocados según el calendario escolar de Zaragoza (España), de forma que calcula el total de días que trabajan los maestros (en el colegio) en esta ciudad, pero, como está especificado ahí, las fechas de los festivos, se pueden colocar a mano o extraer de una BBDD en función de la necesidad para la que se aplica la función.
Espero que te sirva.