Ver Mensaje Individual
  #2 (permalink)  
Antiguo 28/11/2015, 13:46
fbadiola
 
Fecha de Ingreso: octubre-2015
Ubicación: España
Mensajes: 21
Antigüedad: 8 años, 7 meses
Puntos: 6
Respuesta: Sumar días hábiles en PHP

Hola,

He hecho una herramienta con una micro base de datos hecha en un simple array con las fechas festivas y otro con los días de la semana que debe saltar (0 y 6; domingo y sábado). Es una simple idea para que tengas en cuenta como poder desarrollarlo, es muy simple, he comentado las lineas para que puedas entender las variables de configuración y un poco el proceso pero si no te queda claro, o tienes alguna duda, no dudes en consultar!!

Código PHP:
<?php
    date_default_timezone_set
("Europe/Madrid");
    
// Guardamos en una variable los dias festivos en varios arrays con formato
    // $dias_festivos[año][mes] = [dias festivos];
    
$dias_festivos = array(
        
"2015"=>array(12 => [3,4,5,25,31]),
        
"2016"=>array(=> [1,6])
    );
    
$dias_saltados = array(0,6); // 0: domingo, 1: lunes... 6:sabado
    // dias a sumar
    
$dias $dias_origin 10;
    
// dias que el programa ha contado
    
$dias_contados 0;
    
// timestamp actual
    
$time time();
    
// duracion (en segundos) que tiene un día
    
$dia_time 3600*24//3600 segundos en una hora * 24 horas que tiene un dia.


    
function esFestivo($time) {
        global 
$dias_saltados;
        global 
$dias_festivos;

        
$w date("w",$time); // dia de la semana en formato 0-6
        
if(in_array($w$dias_saltados)) return true;
        
$j date("j",$time); // dia en formato 1 - 31
        
$n date("n",$time); // mes en formato 1 - 12
        
$y date("Y",$time); // año en formato XXXX
        
if(isset($dias_festivos[$y]) && isset($dias_festivos[$y][$n]) && in_array($j,$dias_festivos[$y][$n])) return true;

        return 
false;
    }
    
    
    while(
$dias != 0) {
        
$dias_contados++;
        
$tiempoContado $time+($dia_time*$dias_contados); // Sacamos el timestamp en la que estamos ahora mismo comprobando
        
if(esFestivo($tiempoContado) == false)
            
$dias--;
    }
    echo 
"El programa ha recorrido ".$dias_contados." (ha saltado ".($dias_contados-$dias_origin).") hasta llegar la fecha que deseabas:".PHP_EOL
        
.date("D, d/m/Y",$tiempoContado);
    echo 
PHP_EOL;


?>
Un saludo!