Calcular fechas de Semana Santa

Cuando se acerca la Semana Santa siempre me hago la misma pregunta ¿Cómo se calcula la fecha en la que caen las fiestas?

He estado investigando un poco y me he encontrado con la siempre genial Wikipedia. Se explica que el cálculo se realiza en base al calendario Lunar. El Domingo de resurrección será el primer domingo, después del equinocio de primavera (21 de Marzo), en el que haya luna nueva.

Como también se explica el desarrollo de la fórmula del matemático Gauss para calcular dicha fecha, me he picado una líneas en php para poder sacar un listado de las fechas pasadas y futuras de dicha festividad.

Así que los próximos 10 años quedarán tal que así:

Año Jueves Sto Viernes Sto Sábado Sto Domingo Sto
2008 20 de Marzo 21 de Marzo 22 de Marzo 23 de Marzo
2009 9 de Abril 10 de Abril 11 de Abril 12 de Abril
2010 1 de Abril 2 de Abril 3 de Abril 4 de Abril
2011 21 de Abril 22 de Abril 23 de Abril 24 de Abril
2012 5 de Abril 6 de Abril 7 de Abril 8 de Abril
2013 28 de Marzo 29 de Marzo 30 de Marzo 31 de Marzo
2014 17 de Abril 18 de Abril 19 de Abril 20 de Abril
2015 2 de Abril 3 de Abril 4 de Abril 5 de Abril
2016 24 de Marzo 25 de Marzo 26 de Marzo 27 de Marzo
2017 13 de Abril 14 de Abril 15 de Abril 16 de Abril
2018 29 de Marzo 30 de Marzo 31 de Marzo 1 de Abril

Entre 1901 y el 2219 caerán tal que así.

Y si estáis interesados en el código fuente, lo podréis encontrar aquí, (Es un doc, que wordpress no me permite subir nada más), y si leeis el artículo entero, que tampoco es plan de avasallar, también lo tendréis.

Que ustedes se planifiquen bien las próximas 200 o 300 excursiones a la playa.

/*
Programa realizado por Micropakito (Enero 2008).

Si lees esto quedas libre de modificar el código como te plazca,
y mejorarlo, que ha quedado poco ortodoxo.

Y como eres libre de hacerlo, no te cuesta nada decirme (micropakito@gmail.com)
para qué lo has modificado, y donde pretendes usarlo.

Ese tipo de cosas, se agradecen.

El programa pretende realizar un cálculo de las fechas en las
que caerá la semanasanta deacuerdo con las indicaciones que se
indican aquí:

http://es.wikipedia.org/wiki/C%C3%A1lculo_de_la_fecha_de_Pascua

Para más información:

http://www.micropakito.com
https://micropakito.wordpress.com

*/

/*

Como se parte de la base del cálculo de la fecha de Domingo de Pascua,
la resta de fechas para calcular hasta el Jueves Santo puede dar como
resultado la aparición de fechas negativas

(1 de Abril - 3 días -> -2 de Abril.)

Para evitar esto, esta función

*/
function formatea_fecha ($fech, $mes_texto ) {

if ($fech <=0 ) {
$fech =  31 + $fech;
$mes_texto = "Marzo";
}

return $fech . " de " . $mes_texto ;

}

/*
Cáculo de las constantes para la fórmula de Gauss, deacuerdo al año
*/

function calcula_M_N ( $const_M, $const_N , $anio_curso){

if ($anio_curso >=1583  && $anio_curso < 1700 ) {
$const_M = 22;
$const_N = 2;
}
else if ($anio_curso >=1700  && $anio_curso < 1800 ) {
$const_M = 23;
$const_N = 3;

}
else if ($anio_curso >=1800  && $anio_curso < 1900 ) {
$const_M = 23;
$const_N = 4;

}
else if ($anio_curso >=1900  && $anio_curso < 2100 ) {
$const_M = 24;
$const_N = 5;

}
else if ($anio_curso >=2100  && $anio_curso < 2200 ) {
$const_M = 24;
$const_N = 6;

}
else if ($anio_curso >=2200  && $anio_curso < 2299 ) {
$const_M = 25;
$const_N = 0;

}
}

$const_M = 0 ; // Constante Gauss M
$const_N = 0 ; // Constante Gaus N

$anio_inicial = 1901; //Fecha de arranque del script
$anio_final = 2300; //Fecha de fin. Fechas superiores darán error
// por la ausencia de las constantes de Gauss

$a = 0;
$b = 0;
$c = 0;
$d = 0;
$e = 0;

$dia_smaSta = 0;
$mes_smaSta = 0;

echo "<table border=1><tr>\n";
echo "<th>añio</th>\n";
echo "<th>Jueves Sto</th>\n";
echo "<th>Viernes Sto</th>\n";
echo "<th>Sábado Sto</th>\n";
echo "<th>Domingo Sto</th>\n";
echo "</tr>\n";

for ($i = $anio_inicial; $i < $anio_final; $i++){

//averiguo constantes M y N
calcula_M_N ( & $const_M, & $const_N , $i);

//Calculo de Gauss
$a = $i % 19;
$b = $i % 4;
$c = $i % 7;
$d = (19 * $a + $const_M) % 30;
$e = ( (2*$b) + (4*$c) + (6*$d) + $const_N ) % 7 ;

if ( ($d + $e) < 10 ) {
$dia_smaSta = $d + $e + 22;
$mes_smaSta = 3;
}
else {
$dia_smaSta = $d + $e - 9;
$mes_smaSta = 4;
}

//excepciones
if ( $dia_smaSta == 26 && $mes_smaSta == 4 ){
$dia_smaSta = 19;
}
else if ( $dia_smaSta == 25 && $d==28 && $e==6 && $a > 10 ){
$dia_smaSta = 18;
}

//para los textos
if ( $mes_smaSta == 3 ){
$mes_txt = "Marzo";
}
else {
$mes_txt = "Abril";
}

//resultado.
echo "<tr><td>" . $i . "</td>\n";
echo "<td>" . formatea_fecha ( $dia_smaSta - 3, $mes_txt ) ."</td>\n";
echo "<td>" . formatea_fecha ( $dia_smaSta - 2, $mes_txt ) ."</td>\n";
echo "<td>" . formatea_fecha ( $dia_smaSta - 1, $mes_txt) ."</td>\n";
echo "<td>" . formatea_fecha ( $dia_smaSta, $mes_txt ) ."</td>\n";
echo "</tr>";

}
echo "</table>"
Anuncios

5 pensamientos en “Calcular fechas de Semana Santa

  1. israel dice:

    Demasiado tiempo libre es malo para la salud, ten cuidado haber si vas a programar un calendario laboral completo para calcular como maximizar tus vacaciones 😉

    Ya me contaron que te quitaron la corona de laureles en las carreras.
    Nos vemos pronto

  2. samady dice:

    quisiera saber en ke dias kae la semana santa en el 2039

  3. JOSE LUIS dice:

    Hola; interesante lo anterior; mira, yo ando buscando una formula para calcular fechas pasadas, de años anteriores. Si lo sabes, te agradeceria me mandaras un correo. Gracias

  4. cesar dice:

    ooola genial pero tengo una pregunta como es la formula de gauss

  5. cesar dice:

    perdona se me olvido pedirtelo porfavor

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: