Foros del Web » Programando para Internet » PHP »

Calculadora de días festivos Colombia

Estas en el tema de Calculadora de días festivos Colombia en el foro de PHP en Foros del Web. Hola. Les dejo un código que desarrollé en PHP para que me compruebe si una fecha en formato "Y-m-d" es un festivo en Colombia o ...
  #1 (permalink)  
Antiguo 20/09/2012, 21:53
 
Fecha de Ingreso: octubre-2010
Mensajes: 14
Antigüedad: 16 años
Puntos: 0
Sonrisa Calculadora de días festivos Colombia

Hola.

Les dejo un código que desarrollé en PHP para que me compruebe si una fecha en formato "Y-m-d" es un festivo en Colombia o no.

Como la mayoría sabe, los festivos de algunos paises (en especial de latinoamérica) son variables, algunos son fijos y algunos dependen del cálculo de la pascua (Computus). Para ello usé dos funciones, una de estas la saqué de [URL="http://es.wikipedia.org/wiki/Anexo:Implementaciones_del_algoritmo_de_c%C3%A1lcu lo_de_la_fecha_de_Pascua#Algoritmo_en_PHP"]aquí[/URL].

No está muy pulido el código así que recibo sugerencias.

Espero que les sirva.

Código PHP:
<?php
$date_request
=$_REQUEST['date'];
$anio_act = date("Y");
$pascua_actual = pascua($anio_act);
$arr_fechas = array(
$anio_act."-01-01",
get_next_day($anio_act."-01-06"),
get_next_day($anio_act."-03-19"),
date("Y-m-d", strtotime("$pascua_actual -7 days")),
date("Y-m-d", strtotime("$pascua_actual -3 days")),
date("Y-m-d", strtotime("$pascua_actual -2 days")),
$pascua_actual,
$anio_act."-05-01",
date("Y-m-d", strtotime("$pascua_actual +43 days")),
date("Y-m-d", strtotime("$pascua_actual +64 days")),
date("Y-m-d", strtotime("$pascua_actual +71 days")),
get_next_day($anio_act."-06-29"),
$anio_act."-07-20",
$anio_act."-08-07",
get_next_day($anio_act."-08-15"),
get_next_day($anio_act."-10-12"),
get_next_day($anio_act."-11-01"),
get_next_day($anio_act."-11-11"),
$anio_act."-12-08",
$anio_act."-12-25"
);
if(
$date_request!=null){
    
$dc_dreq = date_create($date_request);
    
$tday = date_format($dc_dreq,"w");
    if(
$tday==0){
        echo 
"Sunday";
    }elseif(
$tday>0 && in_array($date_request,$arr_fechas)){
        echo 
"Holiday";
    }else{
        echo 
date("l", strtotime("$date_request"));
    }
}else{
    
print_r($arr_fechas);
}

function 
get_next_day($datebase){
    
$dc_date = date_create($datebase);
    
$nday = date_format($dc_date,"w");
    
$nday = intval($nday);
    if(
$nday==0){
        return 
date("Y-m-d", strtotime("$datebase +1 days"));
    }elseif(
$nday==1){
        return 
$datebase;
    }elseif(
$nday>1){
        
$add_days = 8-$nday;
        return  
date("Y-m-d", strtotime("$datebase +$add_days days"));
    }
}

function 
pascua ($anno){
# Constantes mágicas
    
$M = 24;
    
$N = 5;
#Cálculo de residuos
    
$a = $anno % 19;
    
$b = $anno % 4;
    
$c = $anno % 7;
    
$d = (19*$a + $M) % 30;
    
$e = (2*$b+4*$c+6*$d + $N) % 7;
# Decidir entre los 2 casos:
    
if ( $d + $e < 10 ) {
        
$dia = $d + $e + 22;
        
$mes = 3; // marzo
        
}
    else {
        
$dia = $d + $e - 9;
        
$mes = 4; //abril
        
}
# Excepciones especiales (según artículo)
    
if ( $dia == 26  and $mes == 4 ) { // 4 = abril
        
$dia = 19;
        }
    if ( 
$dia == 25 and $mes == 4 and $d==28 and $e == 6 and $a >10 ) { // 4 = abril
        
$dia = 18;
        }
    
$ret = date("Y-m-d",strtotime($anno.'-'.$mes.'-'.$dia));
        return (
$ret);
}
?>

Etiquetas: calculo, colombia, festivos
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:24.