Ver Mensaje Individual
  #3 (permalink)  
Antiguo 06/02/2016, 03:30
rbczgz
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 20 años, 5 meses
Puntos: 154
Respuesta: dias entre fechas

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
  1. //$fecha_inicio = "2015-09-01"; // En formato aaaa-mm-dd
  2. //$fecha_fin = "2016-06-30"; // En formato aaaa-mm-dd
  3.  
  4. $fecha_inicio = "01-09-2015"; // En formato dd-mm-aaaa
  5. $fecha_fin = "30-06-2016"; // En formato dd-mm-aaaa
  6.  
  7.  
  8. //Array de festivos a tener en cuenta sin contar sábados ni domingos
  9. //Este array puede ser obtenido de una base de datos o completado a mano como aquí
  10.  
  11. $festivos = array(
  12.     //Completar con los días festivos del período, sin contar sábados ni domingos
  13.     '12-10-2015',  //  Día de la Virgen del Pilar o día de la Hispanidad
  14.     '01-11-2015',  //  Día de Todos los Santos (festivo religioso)
  15.     '02-11-2015',  //  Día de Todos los Santos (cambiado del domingo) (festivo religioso)
  16.     '07-12-2015',  //  Día de la Constitución (pasado del domingo)
  17.     '08-12-2015',  //  Inmaculada Concepción de la Virgen (festivo religioso)
  18.     '24-12-2015',  //  Vacaciones de navidad
  19.     '25-12-2015',  //  Natividad del Señor (festivo religioso) (irrenunciable)
  20.     '28-12-2015',  //  Vacaciones de navidad
  21.     '29-12-2015',  //  Vacaciones de navidad
  22.     '30-12-2015',  //  Vacaciones de navidad
  23.     '31-12-2015',  //  Vacaciones de navidad
  24.     '01-01-2016',  //  Año Nuevo (irrenunciable)
  25.     '04-01-2016',  //  Vacaciones de navidad
  26.     '05-01-2016',  //  Vacaciones de navidad
  27.     '06-01-2016',  //  Día de Reyes (irrenunciable)
  28.     '07-01-2016',  //  Vacaciones de navidad
  29.     '08-01-2016',  //  Vacaciones de navidad
  30.     '29-01-2016',  //  San Valero (festivo en Zaragoza capital)
  31.     '04-03-2016',  //  Cincomarzada (pasada del sábado)
  32.     '24-03-2016',  //  Jueves Santo (irrenunciable)
  33.     '25-03-2016',  //  Viernes Santo (irrenunciable)
  34.     '28-03-2016',  //  Vacaciones Semana Santa
  35.     '29-03-2016',  //  Vacaciones Semana Santa
  36.     '30-03-2016',  //  Vacaciones Semana Santa
  37.     '31-03-2016',  //  Vacaciones Semana Santa
  38.     '01-04-2016',  //  Vacaciones Semana Santa
  39.     '22-04-2016',  //  Día de San Jorge (pasado del sábado)
  40.     '02-05-2016'  //  Día del trabajador (pasado del domingo)
  41. );
  42.  
  43. //Esta función devuelve los días laborables entre dos fechas pasadas como parámetros
  44. //siendo el tercer parámetro un array con las fechas de los días festivos a tener en
  45. //cuenta para los fines en que se va a utilizar la función
  46.  
  47. function diasLaborables($fecha_inicio, $fecha_fin, $festivos) {
  48.          //El tercer parámetro que recibe esta función está tratado como un array, por lo que debe serlo
  49.          $fecha_comienzo = new DateTime( $fecha_inicio );    //inicia
  50.          $fecha_finalizacion = new DateTime( $fecha_fin );    //termina
  51.          
  52.          $intervalo = new DateInterval('P1D');    // intervalo de un día
  53.  
  54.          $rango = new DatePeriod($fecha_comienzo, $intervalo ,$fecha_finalizacion); //creamos rango de fechas
  55.          
  56.          $dias_laborables = array();
  57.                   foreach($rango as $date){
  58.                       //Se considera el fin de semana y los festivos como no hábiles
  59.                       if($date->format("N") <6 AND !in_array($date->format("d-m-Y"),$festivos))
  60.                           //$dias_laborables[] = $date->format("Y-m-d"); // se asignan fechas validas, devueltas en formato aaaa-mm-dd
  61.                           $dias_laborables[] = $date->format("d-m-Y"); // se asignan fechas validas, devueltas en formato dd-mm-aaaa
  62.                   }
  63.          return count($dias_laborables);
  64. }
  65.  
  66. //uso: echo diasLaborables($fecha_inicio, $fecha_fin, $festivos);
  67. //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.

Última edición por rbczgz; 06/02/2016 a las 04:18