Detectar Semana Santa con Javascript
Es posible que en estas fiestas cercanas tengamos la necesidad de saber en qué días cae la semana santa.
Podemos determinar que el domingo de resurrección será el primer domingo de luna llena de primavera.
Y sabemos que la primavera empieza el 21 de marzo.
A partir de ahí tenemos claro que el jueves y viernes es festivo y el lunes de pascua en algunas comunidades.
A través de los 'Hijos de la Divina Voluntad' nos encontramos con una página con el código Javascript que calcula ese domingo en función del año de una forma curiosa y lógica!.
Dicha función está extraida de la fórmula de Gauss que podemos observar en la página de la wikipedia con todas sus explicaciones:
Wikipedia: Cálculo de la fecha de Pascua
Aquí está la función para Javascript.
function CalculePascua (Agno, Calendario) {
if (Calendario == "GREGORIANO") {
a=Agno%19
b=Math.floor(Agno/100)
c=Agno%100
d=Math.floor(b/4)
e=b%4
f=Math.floor((b+8)/25)
g=Math.floor((b-f+1)/3)
h=(19*a+b-d-g+15)%30
i=Math.floor(c/4)
k=c%4
l=(32+2*e+2*i-h-k)%7
m=Math.floor((a+11*h+22*l)/451)
p=(h+l-7*m+114)
// Devuelve un registro Registro.Dia_Res / Registro.Mes_Res
return {Dia : (p%31)+1, Mes : Math.floor(p/31)}
} else if (calendario == "JULIANO") {
// Para años anteriores a 1583 (Calendário Juliano):
a = Agno % 4
b = Agno % 7
b = Agno % 19
d = (19*c + 15) % 30
e = (2*a + 4*b - d + 34) % 7
f = Math.floor((d + e + 114) / 31)
g = (d + e + 114) % 31
// Devuelve un registro Registro.Dia_Res / Registro.Mes_Res
return {Dia : g+1, Mes : f}
} else return {Dia : 0, Mes : 0}
} // CalculePascua
Diferenciamos entre Gregoriano y Juliano, tomando como ejemplo el gregoriano.
Ejemplo:
Agno=>2009
a=Agno%19 ( ) => 14
b=Math.floor(Agno/100) => 20
c=Agno%100 => 9
d=Math.floor(b/4) => 5
e=b%4 => 0
f=Math.floor((b+8)/25) => 1
g=Math.floor((b-f+1)/3) => 6
h=(19*a+b-d-g+15)%30 => 20
i=Math.floor(c/4) => 2
k=c%4 => 1
l=(32+2*e+2*i-h-k)%7 => 1
m=Math.floor((a+11*h+22*l)/451) => 0
p=(h+l-7*m+114) => 135
Dia : (p%31)+1 =>12
Mes : Math.floor(p/31) =>4
12 de marzo es el domingo de resurrección.
En el enlade de la wikipedia podemos obtener ejemplos para:
- Java
- Python
- Perl
- PHP
- Turbo Pascal
- pl/pgsql de postgresql
- PowerBuilder