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);
}
?>