Ver Mensaje Individual
  #1 (permalink)  
Antiguo 20/09/2012, 21:53
davidmov
 
Fecha de Ingreso: octubre-2010
Mensajes: 14
Antigüedad: 14 años, 5 meses
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>&& 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 = abril
        
$dia 19;
        }
    if ( 
$dia == 25 and $mes == and $d==28 and $e == and $a >10 ) { // 4 = abril
        
$dia 18;
        }
    
$ret date("Y-m-d",strtotime($anno.'-'.$mes.'-'.$dia));
        return (
$ret);
}
?>