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: 14 años, 3 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($fechadate_interval_create_from_date_string('1 days'));
        }
    }else{
        
$cantidadDiasFeriados++;
        
$fecha date_create($fecha);
        
$fecha date_add($fechadate_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 == || $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