Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Calcular fecha de culminación de las vacaciones

Estas en el tema de Calcular fecha de culminación de las vacaciones en el foro de PHP en Foros del Web. Estoy terminando mis estudios y en donde hago las pasantias me pidieron un sistema que me diga la fecha de retorno de un trabajador de ...
  #1 (permalink)  
Antiguo 19/07/2013, 14:17
Avatar de j_silk_h  
Fecha de Ingreso: julio-2010
Mensajes: 54
Antigüedad: 14 años, 3 meses
Puntos: 6
Pregunta Calcular fecha de culminación de las vacaciones

Estoy terminando mis estudios y en donde hago las pasantias me pidieron un sistema que me diga la fecha de retorno de un trabajador de sus vacaciones.

El asunto es este, necesito elaborar una función que reciba como parámetro la fecha de inicio de sus vacaciones y la CANTIDAD DE DÍAS que este durara en sus vacaciones, la función debe retornar la FECHA de regreso del empleado sin contar días feriados ni sábados ni domingos.

Se que es algo complicado, me gustaría que me dieran ayuda

Código PHP:
function ('fecha_inicio_vacaciones','20'){

$feriados  = array( 
'1-1',  //  Año Nuevo (irrenunciable) 
'10-4',  //  Viernes Santo (feriado religioso) 
'11-4',  //  Sábado Santo (feriado religioso) 
'1-5',  //  Día Nacional del Trabajo (irrenunciable) 
'21-5',  //  Día de las Glorias Navales 
'29-6',  //  San Pedro y San Pablo (feriado religioso) 
'16-7',  //  Virgen del Carmen (feriado religioso) 
'15-8',  //  Asunción de la Virgen (feriado religioso) 
'18-9',  //  Día de la Independencia (irrenunciable) 
'19-9',  //  Día de las Glorias del Ejército 
'12-10',  //  Aniversario del Descubrimiento de América 
'31-10',  //  Día Nacional de las Iglesias Evangélicas y Protestantes (feriado religioso) 
'1-11',  //  Día de Todos los Santos (feriado religioso) 
'8-12',  //  Inmaculada Concepción de la Virgen (feriado religioso) 
'13-12',  //  elecciones presidencial y parlamentarias (puede que se traslade al domingo 13) 
'25-12',  //  Natividad del Señor (feriado religioso) (irrenunciable) 
); 


Podrán ayudarme?
  #2 (permalink)  
Antiguo 19/07/2013, 15:01
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 9 meses
Puntos: 288
Respuesta: Calcular fecha de culminación de las vacaciones

yo guardaria en una tabla esos dias que no son laborables y haria un simple for donde cuento desde la fecha deinicio de vacaciones hasta finalizar, salteandome los dias que no estan disponibles:
Código PHP:
Ver original
  1. <?
  2. $fechaInicioVacaciones = '2013-01-01'; //formtao sql yyyy-mm-dd
  3. $cantidadDiasVacaciones = 14;
  4. $cuanteDias = 0;
  5. $fechaSalida = "";
  6. while(true){
  7.    
  8.     $fecha = date_create($fechaIniciovacaciones);
  9.     $fechaSalida =  date_add($fecha, date_interval_create_from_date_string('1 days'));
  10.     if( is_dia_valido($fechaIniciovacaciones) ){
  11.         $cuanteDias ++;
  12.     }
  13.     if($cuanteDias <= $cantidadDiasVacaciones){
  14.         break;
  15.     }
  16. }
  17. // FECHA DE FIN DE VACACIONES
  18. echo date_format($fechaSalida, 'Y-m-d');
  19. //SOLO DEBERIAS CREAR UNA FUCION  QUE VALIDE LA FECHA VALIDA:
  20.  
  21. funciton is_dia_valido($fecha){
  22. //compara la fecha $fecha con la del listado
  23.  
  24. /*
  25. EL ARRAY DE FECHAS DEBE TENER FORMATO DD-MM
  26. */
  27. $fecha = $fecha("-", $fecha);
  28. $fecha = $fecha[2]."-".$fecha[1]; // deberia devolver DIA-MES
  29.  
  30. if(in_array($fecha, $feriados))
  31.     return true;
  32. else
  33.     return false
  34.  
  35. //return true o false
  36. }
EL RESTO DE LAS FUNCIONES SON NATIVAS DE PHP, LAS PODES BUSCAR EN PHP.NET
?>
  #3 (permalink)  
Antiguo 20/07/2013, 08:01
Avatar de j_silk_h  
Fecha de Ingreso: julio-2010
Mensajes: 54
Antigüedad: 14 años, 3 meses
Puntos: 6
Respuesta: Calcular fecha de culminación de las vacaciones

Eso me funciona para esto?

Recibo la fecha del empleado de vacaciones (2013/04/01) -> (Y-m-d)

Luego supongamos que le corresponden "20" días de disfrute vacacional

El sistema debe decirme cuando el regresara (2013-04-21)

Pero hay días feriados, sábados y domingos así que debo sumarle los días NO DISFRUTABLES a su fecha final quedando la fecha de retorno en: (2013-04-30)

Ese en realidad es el procedimiento.
  #4 (permalink)  
Antiguo 20/07/2013, 08:04
Avatar de j_silk_h  
Fecha de Ingreso: julio-2010
Mensajes: 54
Antigüedad: 14 años, 3 meses
Puntos: 6
Respuesta: Calcular fecha de culminación de las vacaciones

Creo que ya estoy entendiendo, dame unos minutos para analizarlo y correrlo y te aviso!
  #5 (permalink)  
Antiguo 20/07/2013, 13:12
Avatar de a n g e l u s  
Fecha de Ingreso: enero-2006
Ubicación: Chile
Mensajes: 237
Antigüedad: 18 años, 10 meses
Puntos: 1
Respuesta: Calcular fecha de culminación de las vacaciones

Hola,

Te aporto un dato al cálculo de vacaciones si eres de Chile.

Un trabajador adquiere el derecho a un día más de vacaciones cuando completa 13 años de cotizaciones, en cualquier sistema previsional, siempre y cuando haya trabajado los últimos tres con un mismo empleador.

Además los días fijos que propones en tu arreglo no aplicaria mucho ya que en Chile hay una ley de correr algunos días feriados que caen a mitad de semana para los lunes.

Espero te sea util la información extra a tu cálculo.
__________________
Atte,
A n g e l u s
Concepción - Chile
más vale respuestas bien pensadas, que 7000 post
  #6 (permalink)  
Antiguo 22/07/2013, 08:13
Avatar de 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
  #7 (permalink)  
Antiguo 22/07/2013, 09:48
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 9 meses
Puntos: 288
Respuesta: Calcular fecha de culminación de las vacaciones

Excelente!
la idea era que a parir de mi ayuda vos puedas adaptarlo a tus necesidades.

te recomiendo mostrar este mensaje fuera del while:
Código PHP:
Ver original
  1. <?
  2. echo $fecha."<br>";
  3.             echo "Cantidad dias validos: ".$cantidadDiasValidos."<br>";
  4.             echo "Cantidad dias feriados: ".$cantidadDiasFeriados."<br>";
  5.             echo "------------------<br>";
  6. ?>

saludos!

Etiquetas: calcular, dias, empleados, vacaciones
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:01.