5 métodos para calcular el Domingo de Pascua

fecha domingo pascua

Se acerca la Semana Santa y con ella vuelve a surgir la pregunta de todos los años: por qué siempre cae en fechas diferentes? ¿cómo se elige la fecha del año que viene?

Para comenzar, la fecha no se elige. Se terminó de establecer en Roma en el año 525 y dice que la Pascua de Resurección es el domingo inmediatamente posterior a la primera luna llena tras el equinoccio de marzo y se calcula empleando la luna llena astronómica. Por ello puede ocurrir no antes del 22 de marzo y el 25 de abril como máximo. (Wikipedia)

Vale, muy bien, pero ¿cómo se calcula?

Si quieres profundizar en el tema te aconsejo que eches un vistazo al Computus (el cálculo que se hizo en 525). Más adelante te muestro cómo crear una función personalzada con este algoritmo.

Navegando por Internet me he encontrado con muchas fórmulas capaces de calcular la fecha del Domingo de Pascua según el año.

Calcular el domingo de Pascua con fórmulas

La primera fórmula fue creada por Norbert Hetterich y con ella ganó el concurso de “la fórmula más corta” en el foro de Herber para calcular esta fecha:

=MULTIPLO.INFERIOR(DIA(MINUTO(A1/38)/2+56)&”/5/”&A1;7)-34

En el mismo concurso el segundo premio se lo llevó Thomas Jansen:

=MONEDA((“4/”&A1)/7+RESIDUO(19*RESIDUO(A1;19)-7;30)*14%;)*7-6

El tercer premio fue para Roger Friederich:

=MULTIPLO.INFERIOR(FECHA(J;3;RESIDUO(18,37*RESIDUO(J;19)-6;29));7)+29

Y una propuesta muy curiosa fue la de Prasad DV:

=TRUNCAR(FECHA(J;7;-CODIGO(EXTRAE(“NYDQ\JT_LWBOZER]KU`”;RESIDUO(J;19)+1;1)))/7)*7+8

Y por último, una fórmula que no he logrado descifrar. Una auténtica locura. Pertenece a Greg Mallen:

=FECHA(A1;SI(SI(RESIDUO(SI((ENTERO(A1/100)-20)<13;0;ELEGIR((ENTERO(A1/100)-20)-12;-2;0;0;-2;-2;0;-2;-2))+SI((ENTERO(A1/100)-20)<1;0;ELEGIR((ENTERO(A1/100)-20);-1;0;0;-1;-1;0;-1;-1;-1;-1;-1;-1;0;-1;-1;0;0;-1;0;0))+ENTERO(((ENTERO(A1/100)-20)+5)/2)+202-11RESIDUO(A1;19);30)=29;-1;SI(Y(RESIDUO(SI((ENTERO(A1/100)-20)<13;0;ELEGIR((ENTERO(A1/100)-20)-12;-2;0;0;-2;-2;0;-2;-2))+SI((ENTERO(A1/100)-20)<1;0;ELEGIR((ENTERO(A1/100)-20);-1;0;0;-1;-1;0;-1;-1;-1;-1;-1;-1;0;-1;-1;0;0;-1;0;0))+ENTERO(((ENTERO(A1/100)-20)+5)/2)+202-11RESIDUO(A1;19);30)=28;RESIDUO(A1;19)>10);-1;0))+RESIDUO(SI((ENTERO(A1/100)-20)<13;0;ELEGIR((ENTERO(A1/100)-20)-12;-2;0;0;-2;-2;0;-2;-2))+SI((ENTERO(A1/100)-20)<1;0;ELEGIR((ENTERO(A1/100)-20);-1;0;0;-1;-1;0;-1;-1;-1;-1;-1;-1;0;-1;-1;0;0;-1;0;0))+ENTERO(((ENTERO(A1/100)-20)+5)/2)+202-11RESIDUO(A1;19);30)+21+RESIDUO((20-(RESIDUO((SI(RESIDUO(SI((ENTERO(A1/100)-20)<13;0;ELEGIR((ENTERO(A1/100)-20)-12;-2;0;0;-2;-2;0;-2;-2))+SI((ENTERO(A1/100)-20)<1;0;ELEGIR((ENTERO(A1/100)-20);-1;0;0;-1;-1;0;-1;-1;-1;-1;-1;-1;0;-1;-1;0;0;-1;0;0))+ENTERO(((ENTERO(A1/100)-20)+5)/2)+202-11RESIDUO(A1;19);30)=29;-1;SI(Y(RESIDUO(SI((ENTERO(A1/100)-20)<13;0;ELEGIR((ENTERO(A1/100)-20)-12;-2;0;0;-2;-2;0;-2;-2))+SI((ENTERO(A1/100)-20)<1;0;ELEGIR((ENTERO(A1/100)-20);-1;0;0;-1;-1;0;-1;-1;-1;-1;-1;-1;0;-1;-1;0;0;-1;0;0))+ENTERO(((ENTERO(A1/100)-20)+5)/2)+202-11RESIDUO(A1;19);30)=28;RESIDUO(A1;19)>10);-1;0))+RESIDUO(SI((ENTERO(A1/100)-20)<13;0;ELEGIR((ENTERO(A1/100)-20)-12;-2;0;0;-2;-2;0;-2;-2))+SI((ENTERO(A1/100)-20)<1;0;ELEGIR((ENTERO(A1/100)-20);-1;0;0;-1;-1;0;-1;-1;-1;-1;-1;-1;0;-1;-1;0;0;-1;0;0))+ENTERO(((ENTERO(A1/100)-20)+5)/2)+202-11RESIDUO(A1;19);30)+21-19);7))-(SI(SI(RESIDUO((40-(ENTERO(A1/100)-20));4)=3;1;0)+RESIDUO((40-(ENTERO(A1/100)-20));4)>1;1;0)+SI(RESIDUO((40-(ENTERO(A1/100)-20));4)=3;1;0)+RESIDUO((40-(ENTERO(A1/100)-20));4))-(RESIDUO((RESIDUO(A1;100) + ENTERO(RESIDUO(A1;100) / 4));7)));7)+1>31;4;3);SI(SI(RESIDUO(SI((ENTERO(A1/100)-20)<13;0;ELEGIR((ENTERO(A1/100)-20)-12;-2;0;0;-2;-2;0;-2;-2))+SI((ENTERO(A1/100)-20)<1;0;ELEGIR((ENTERO(A1/100)-20);-1;0;0;-1;-1;0;-1;-1;-1;-1;-1;-1;0;-1;-1;0;0;-1;0;0))+ENTERO(((ENTERO(A1/100)-20)+5)/2)+202-11RESIDUO(A1;19);30)=29;-1;SI(Y(RESIDUO(SI((ENTERO(A1/100)-20)<13;0;ELEGIR((ENTERO(A1/100)-20)-12;-2;0;0;-2;-2;0;-2;-2))+SI((ENTERO(A1/100)-20)<1;0;ELEGIR((ENTERO(A1/100)-20);-1;0;0;-1;-1;0;-1;-1;-1;-1;-1;-1;0;-1;-1;0;0;-1;0;0))+ENTERO(((ENTERO(A1/100)-20)+5)/2)+202-11RESIDUO(A1;19);30)=28;RESIDUO(A1;19)>10);-1;0))+RESIDUO(SI((ENTERO(A1/100)-20)<13;0;ELEGIR((ENTERO(A1/100)-20)-12;-2;0;0;-2;-2;0;-2;-2))+SI((ENTERO(A1/100)-20)<1;0;ELEGIR((ENTERO(A1/100)-20);-1;0;0;-1;-1;0;-1;-1;-1;-1;-1;-1;0;-1;-1;0;0;-1;0;0))+ENTERO(((ENTERO(A1/100)-20)+5)/2)+202-11RESIDUO(A1;19);30)+21+RESIDUO((20-(RESIDUO((SI(RESIDUO(SI((ENTERO(A1/100)-20)<13;0;ELEGIR((ENTERO(A1/100)-20)-12;-2;0;0;-2;-2;0;-2;-2))+SI((ENTERO(A1/100)-20)<1;0;ELEGIR((ENTERO(A1/100)-20);-1;0;0;-1;-1;0;-1;-1;-1;-1;-1;-1;0;-1;-1;0;0;-1;0;0))+ENTERO(((ENTERO(A1/100)-20)+5)/2)+202-11RESIDUO(A1;19);30)=29;-1;SI(Y(RESIDUO(SI((ENTERO(A1/100)-20)<13;0;ELEGIR((ENTERO(A1/100)-20)-12;-2;0;0;-2;-2;0;-2;-2))+SI((ENTERO(A1/100)-20)<1;0;ELEGIR((ENTERO(A1/100)-20);-1;0;0;-1;-1;0;-1;-1;-1;-1;-1;-1;0;-1;-1;0;0;-1;0;0))+ENTERO(((ENTERO(A1/100)-20)+5)/2)+202-11RESIDUO(A1;19);30)=28;RESIDUO(A1;19)>10);-1;0))+RESIDUO(SI((ENTERO(A1/100)-20)<13;0;ELEGIR((ENTERO(A1/100)-20)-12;-2;0;0;-2;-2;0;-2;-2))+SI((ENTERO(A1/100)-20)<1;0;ELEGIR((ENTERO(A1/100)-20);-1;0;0;-1;-1;0;-1;-1;-1;-1;-1;-1;0;-1;-1;0;0;-1;0;0))+ENTERO(((ENTERO(A1/100)-20)+5)/2)+202-11RESIDUO(A1;19);30)+21-19);7))-(SI(SI(RESIDUO((40-(ENTERO(A1/100)-20));4)=3;1;0)+RESIDUO((40-(ENTERO(A1/100)-20));4)>1;1;0)+SI(RESIDUO((40-(ENTERO(A1/100)-20));4)=3;1;0)+RESIDUO((40-(ENTERO(A1/100)-20));4))-(RESIDUO((RESIDUO(A1;100) + ENTERO(RESIDUO(A1;100) / 4));7)));7)+1>31;-31;0)+SI(RESIDUO(SI((ENTERO(A1/100)-20)<13;0;ELEGIR((ENTERO(A1/100)-20)-12;-2;0;0;-2;-2;0;-2;-2))+SI((ENTERO(A1/100)-20)<1;0;ELEGIR((ENTERO(A1/100)-20);-1;0;0;-1;-1;0;-1;-1;-1;-1;-1;-1;0;-1;-1;0;0;-1;0;0))+ENTERO(((ENTERO(A1/100)-20)+5)/2)+202-11RESIDUO(A1;19);30)=29;-1;SI(Y(RESIDUO(SI((ENTERO(A1/100)-20)<13;0;ELEGIR((ENTERO(A1/100)-20)-12;-2;0;0;-2;-2;0;-2;-2))+SI((ENTERO(A1/100)-20)<1;0;ELEGIR((ENTERO(A1/100)-20);-1;0;0;-1;-1;0;-1;-1;-1;-1;-1;-1;0;-1;-1;0;0;-1;0;0))+ENTERO(((ENTERO(A1/100)-20)+5)/2)+202-11RESIDUO(A1;19);30)=28;RESIDUO(A1;19)>10);-1;0))+RESIDUO(SI((ENTERO(A1/100)-20)<13;0;ELEGIR((ENTERO(A1/100)-20)-12;-2;0;0;-2;-2;0;-2;-2))+SI((ENTERO(A1/100)-20)<1;0;ELEGIR((ENTERO(A1/100)-20);-1;0;0;-1;-1;0;-1;-1;-1;-1;-1;-1;0;-1;-1;0;0;-1;0;0))+ENTERO(((ENTERO(A1/100)-20)+5)/2)+202-11RESIDUO(A1;19);30)+21+RESIDUO((20-(RESIDUO((SI(RESIDUO(SI((ENTERO(A1/100)-20)<13;0;ELEGIR((ENTERO(A1/100)-20)-12;-2;0;0;-2;-2;0;-2;-2))+SI((ENTERO(A1/100)-20)<1;0;ELEGIR((ENTERO(A1/100)-20);-1;0;0;-1;-1;0;-1;-1;-1;-1;-1;-1;0;-1;-1;0;0;-1;0;0))+ENTERO(((ENTERO(A1/100)-20)+5)/2)+202-11RESIDUO(A1;19);30)=29;-1;SI(Y(RESIDUO(SI((ENTERO(A1/100)-20)<13;0;ELEGIR((ENTERO(A1/100)-20)-12;-2;0;0;-2;-2;0;-2;-2))+SI((ENTERO(A1/100)-20)<1;0;ELEGIR((ENTERO(A1/100)-20);-1;0;0;-1;-1;0;-1;-1;-1;-1;-1;-1;0;-1;-1;0;0;-1;0;0))+ENTERO(((ENTERO(A1/100)-20)+5)/2)+202-11RESIDUO(A1;19);30)=28;RESIDUO(A1;19)>10);-1;0))+RESIDUO(SI((ENTERO(A1/100)-20)<13;0;ELEGIR((ENTERO(A1/100)-20)-12;-2;0;0;-2;-2;0;-2;-2))+SI((ENTERO(A1/100)-20)<1;0;ELEGIR((ENTERO(A1/100)-20);-1;0;0;-1;-1;0;-1;-1;-1;-1;-1;-1;0;-1;-1;0;0;-1;0;0))+ENTERO(((ENTERO(A1/100)-20)+5)/2)+202-11RESIDUO(A1;19);30)+21-19);7))-(SI(SI(RESIDUO((40-(ENTERO(A1/100)-20));4)=3;1;0)+RESIDUO((40-(ENTERO(A1/100)-20));4)>1;1;0)+SI(RESIDUO((40-(ENTERO(A1/100)-20));4)=3;1;0)+RESIDUO((40-(ENTERO(A1/100)-20));4))-(RESIDUO((RESIDUO(A1;100) + ENTERO(RESIDUO(A1;100) / 4));7)));7)+1)

Existen muchas otra fórmulas para hacer el cálculo (centenares de ellas). Aparentemente todas (incluidas las ganadoras) funcionan correctamente aunque al probarlas con “años extremos” comienzan a diferir unas de otras.

Por ejemplo, la fórmula de Thomas Jansen “solo” funciona correctamente entre los años 190 y 2203. A partir de 2203 el resultado varía con respecto al Computus.

Calcular el Domingo de Pascua con funciones personalizadas

También existen un gran número de funciones personalizadas que calculan el Domingo de Pascua. Suelen hacerlo con mayor precisión. El más preciso que se conoce hasta el momento es del United States Naval Observatory (USNO) y parece calcular correctamente desde el año 1583 hasta el 4099.

Public Function DomingoPascuaUSNO(AAAA As Integer) As Long

    'The following algorithm for computing the date of Easter is based on the algorithm of Oudin (1940).
    'It is valid for any Gregorian year, Y.
    'All variables are integers and the remainders of all divisions are dropped (\ operator).

    Dim C As Integer
    Dim N As Integer
    Dim K As Integer
    Dim I As Integer
    Dim J As Integer
    Dim L As Integer
    Dim M As Integer
    Dim D As Integer

    C = AAAA \ 100                  'first 2 digits of year
    N = AAAA Mod 19                 'remainder of year / 19
    K = (C - 17) \ 25
    I = C - C \ 4 - (C - K) \ 3 + 19 * N + 15
    I = I Mod 30
    I = I - (I \ 28) * (1 - (I \ 28) * (29 \ (I + 1)) * ((21 - N) \ 11))
    J = AAAA + AAAA \ 4 + I + 2 - C + C \ 4
    J = J Mod 7
    L = I - J
    M = 3 + (L + 40) \ 44
    D = L + 28 - 31 * (M \ 4)

    DomingoPascuaUSNO = DateSerial(AAAA, M, D)

End Function

Respuestas

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

  1. Gracias Sergio por una recopilación tan buena de cómputos que hacen la Pascua. Algunos no los conocía y me los guardo en la mochila de Excel.
    Salu2,
    Pedro Wave

    1. Gracias Pedro! He de confesarte que para escribir esta publicación he tomado tu web como referencia (entre otras) ?