Ver Mensaje Individual
  #6 (permalink)  
Antiguo 22/07/2013, 08:13
Avatar de j_silk_h
j_silk_h
 
Fecha de Ingreso: julio-2010
Mensajes: 54
Antigüedad: 16 años, 2 meses
Puntos: 6
Sonrisa Respuesta: Calcular fecha de culminación de las vacaciones

He logrado resolver el asunto partiendo de la solución de Patriarka, me diste grandes ideas y funciones que no conocía, aquí la solución.


Código PHP:
<?php
$fecha 
= '2013-01-01'; //formtao sql yyyy-mm-dd
$cantidadDiasVacaciones = 14;
$cantidadDiasValidos = 0;
$cantidadDiasFeriados = 0;
$fechaSalida = "";

while(
true){
    
    if(
is_dia_valido($fecha)){
        
$cantidadDiasValidos++;
        
        if(
$cantidadDiasValidos == $cantidadDiasVacaciones){
            echo 
$fecha."<br>";
            echo 
"Cantidad dias validos: ".$cantidadDiasValidos."<br>";
            echo 
"Cantidad dias feriados: ".$cantidadDiasFeriados."<br>";
            echo 
"------------------<br>";
            break;
        }else{
            
$fecha = date_create($fecha);
            
$fecha = date_add($fecha, date_interval_create_from_date_string('1 days'));
        }
    }else{
        
$cantidadDiasFeriados++;
        
$fecha = date_create($fecha);
        
$fecha = date_add($fecha, date_interval_create_from_date_string('1 days'));
    }
    
    
$fecha =  date_format($fecha, 'Y-m-d');
}


function 
is_dia_valido($fecha){

    
$weekday = date("w", strtotime($fecha));
    
    if(
$weekday == 0 || $weekday == 6){
        return 
false;
    }else{
        
$feriados  = array(
                            
'01-01',
                            
'10-04',
                            
'11-04',
                            
'01-05',
                            
'21-05',
                            
'29-06',
                            
'16-07',
                            
'15-08',
                            
'18-09',
                            
'19-09',
                            
'12-10',
                            
'31-10',
                            
'01-11',
                            
'08-12',
                            
'13-12',
                            
'25-12');
        
        
$fecha = explode("-", $fecha);
        
$fecha = $fecha[2]."-".$fecha[1]; // deberia devolver DIA-MES 
        
        
if(in_array($fecha, $feriados)){
            return 
false;
        }
        else{
            return 
true;
        }
    }
}

?>


Cabe destacar que tambien toma en cuenta los dias no laborables como sabados y domingos