Ver Mensaje Individual
  #9 (permalink)  
Antiguo 18/12/2015, 09:38
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 10 meses
Puntos: 379
Respuesta: Calcular Festivos y Fines de Semana

Código PHP:
Ver original
  1. $holiday = array(
  2.     '01-01',  //  Año Nuevo (irrenunciable)
  3.     '10-04',  //  Viernes Santo (feriado religioso)
  4.     '11-04',  //  Sábado Santo (feriado religioso)
  5.     '01-05',  //  Día Nacional del Trabajo (irrenunciable)
  6.     '21-05',  //  Día de las Glorias Navales
  7.     '29-06',  //  San Pedro y San Pablo (feriado religioso)
  8.     '16-07',  //  Virgen del Carmen (feriado religioso)
  9.     '15-08',  //  Asunción de la Virgen (feriado religioso)
  10.     '18-09',  //  Día de la Independencia (irrenunciable)
  11.     '19-09',  //  Día de las Glorias del Ejército
  12.     '12-10',  //  Aniversario del Descubrimiento de América
  13.     '31-10',  //  Día Nacional de las Iglesias Evangélicas y Protestantes (feriado religioso)
  14.     '01-11',  //  Día de Todos los Santos (feriado religioso)
  15.     '08-12',  //  Inmaculada Concepción de la Virgen (feriado religioso)
  16.     '13-12',  //  elecciones presidencial y parlamentarias (puede que se traslade al domingo 13)
  17.     '25-12',  //  Natividad del Señor (feriado religioso) (irrenunciable)
  18. );
  19.  
  20. $startDate = new DateTime( '2015-12-01' );    //inicia
  21. $endDate = new DateTime( '2016-01-30' );    //termina
  22.  
  23. $interval = new DateInterval('P1D');    // intervalo de un día
  24. /** @var \DateTime[] $date_range */
  25. $date_range = new DatePeriod($startDate, $interval ,$endDate); //creamos rango de fechas
  26.  
  27. $working_days = array();
  28. foreach($date_range as $date){
  29.     //Se considera el fin de semana y los feriados como no hábiles
  30.     if($date->format("N") <6 AND !in_array($date->format("d-m"),$holiday))
  31.         $working_days[] = $date->format("Y-m-d"); // se asignan fechas validas
  32. }
  33.  
  34. var_dump($working_days);
Recuerda probar el código, esto lo puedes meter fácilmente a una función o hacer una clase.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.

Última edición por hhs; 18/12/2015 a las 10:24