Cálculo da Páscoa

Cálculo do dia em que deve acontecer a Páscoa

O cálculo da data da Páscoa, também conhecido como Computus em latim, é fundamental no calendário cristão desde os primórdios da cristandade, tornando-se definido na Idade Média.

Tábua medieval da Escandinávia, em escrita rúnica, para cálculo da data da Páscoa
Distribuição das datas da Páscoa para um período completo de 5.700.000 anos.

A Páscoa é celebrada no primeiro domingo após a primeira lua cheia que ocorre depois do equinócio da Primavera (no hemisfério norte, outono no hemisfério sul), ou seja, é equivalente à antiga regra de que seria o primeiro Domingo após o 14º dia do mês lunar de Nissan. O dia de domingo pode variar desde 22 de Março até 25 de Abril, dependendo da disposição dos dias e dos meses nas semanas. Os dias extremos deste intervalo correspondem muito raramente a domingos de Páscoa. A última vez que ocorreu a 22 de Março foi em 1818 e a próxima será em 2285. Menos raras são as Páscoas a 23 de Março (anos 1913, 2008 e 2160) e 25 de Abril (anos 1943, 2038 e 2190).[1]

Cálculo da data da Páscoa recorrendo a tabela simples

editar

Obtenha o número dourado somando 1 ao resto da divisão inteira do ano em questão por 19.

Ao número final chamaremos de "X". Esse número é o "número dourado" que corresponde a uma data específica dada na tabela abaixo. A Páscoa será celebrada ao domingo seguinte à data encontrada na tabela. Caso a data já seja um domingo, a Páscoa é o domingo da semana seguinte.

Exemplo:

2020/19 é igual a 106, com resto 6;

6+1 = 7 (Número dourado)

Consultando na tabela, chega-se a 8 de abril, depois veja qual o domingo seguinte. A Páscoa em 2020 será dia 12 de abril, já que dia 8 é quarta-feira.

Ano X Data
1995 2014 1 14 de Abril
1996 2015 2 3 de Abril
1997 2016 3 23 de Março
1998 2017 4 11 de Abril
1999 2018 5 31 de Março
2000 2019 6 18 de Abril
2001 2020 7 8 de Abril
2002 2021 8 28 de Março
2003 2022 9 16 de Abril
2004 2023 10 5 de Abril
2005 2024 11 25 de Março
2006 2025 12 13 de Abril
2007 2026 13 2 de Abril
2008 2027 14 22 de Março
2009 2028 15 10 de Abril
2010 2029 16 30 de Março
2011 2030 17 17 de Abril
2012 2031 18 7 de Abril
2013 2032 19 27 de Março

Cálculo da data da Páscoa recorrendo a algoritmos

editar

Algoritmo de Gauss

editar

Para calcular o dia da Páscoa (Domingo), usa-se a fórmula abaixo, onde o "ANO" deve ser introduzido com 4 dígitos. O operador MOD é o resto da divisão. Os valores X e Y são retirados da tabela a seguir: [2]

Faixa de anos X Y
1582 1699 22 2
1700 1799 23 3
1800 1899 23 4
1900 2099 24 5
2100 2199 24 6
2200 2299 25 7


 a = ANO MOD 19
 b = ANO MOD 4
 c = ANO MOD 7
 d = ((19*a)+X)MOD 30
 e = ((2*b)+(4*c)+(6*d)+Y) MOD 7
 se: (d+e)<10 então o dia = (d+e+22) e mês=Março
 senão: dia=(d+e-9) e mês=Abril
 exceções:
 # quando o domingo de Páscoa calculado for 26 de Abril, corrige-se para uma semana antes, ou seja, 19 de Abril (ocorre em 2076).
 # quando o domingo de Páscoa calculado for 25 de Abril e d=28 e a>10, então a Páscoa é em 18 de Abril (ocorre em 2049).
exemplos:
Para o ano de 2024:
a=2024 MOD 19 = 10
b=2024 MOD 4 = 0
c=2024 MOD 7 = 1
d=(19 * 10 + 24) MOD 30 = 4
e=(2 * 0 + 4 *1 + 6 * 4 + 5) MOD 7 = 5
(d + e) = 4 + 5 = 9
Logo, o Domingo de Páscoa calha 9 dias depois de 22/3/2024, ou seja a 31 de março de 2024

Algoritmo de Meeus/Jones/Butcher

editar

Outro Algoritmo, conhecido como "Meeus/Jones/Butcher", tem a vantagem de não ter exceções para o calendário gregoriano (a partir de 1583), conforme apresentado por Jean Meeus em seu livro "Astronomical Algorithms"[3]:

 a = ANO MOD 19
 b = ANO \ 100
 c = ANO MOD 100
 d = b \ 4
 e = b MOD 4
 f = (b + 8) \ 25
 g = (b - f + 1) \ 3
 h = (19 × a + b - d - g + 15) MOD 30
 i = c \ 4
 k = c MOD 4
 L = (32 + 2 × e + 2 × i - h - k) MOD 7
 m = (a + 11 × h + 22 × L) \ 451
 MÊS = (h + L - 7 × m + 114) \ 31
 DIA = 1+ (h + L - 7 × m + 114)MOD 31

Obs.: O sinal "\" refere-se à divisão obtendo o inteiro (INT). Exemplo: 7\3 é igual a 2 e não a 2,333.

Exemplo para o ano de 2008:

 a = 2008 MOD 19 = 13
 b = 2008 \ 100 = 20
 c = 2008 MOD 100 = 8
 d = 20 \ 4 = 5
 e = 20 MOD 4) = 0
 f = (20 + 8) \ 25 = 1
 g = (20 - 1 + 1) \ 3 = 6
 h = (19 × 13 + 20 - 5 - 6 + 15) MOD 30 = 1
 i = 8 \ 4 = 2
 k = 8 MOD 4 = 0
 L = (32 + 2 × 0 + 2 × 2 - 1 - 0) MOD 7 = 0
 m = (13 + 11 × 1 + 22 × 0) \ 451 = 0
 MÊS = (1 + 0 - 7 × 0 + 114) \ 31 = 3 (Março)
 DIA =1 + (1 + 0 - 7 × 0 + 114) MOD 31 + 1 = 23
 
 Ou seja, a Páscoa de 2008 caiu em 23 de Março.

Datas dos feriados móveis

editar

A seguir temos uma tabela com todos os feriados móveis de um ano, sendo eles: Carnaval, Sexta-Feira Santa, Páscoa e Corpus Christi, do período de 1850 a 2209. [4]

Datas para feriados móveis entre os anos 1900 e 2209
Ano Carnaval Sexta-feira Santa Páscoa Corpus Christi
- 1900 1990 2142 27 de fevereiro 13 de abril 15 de abril 14 de junho
- - 1991 2143 12 de fevereiro 29 de março 31 de março 30 de maio
- - 1992 2144 3 de março 17 de abril 19 de abril 18 de junho
- - 1993 2145 23 de fevereiro 9 de abril 11 de abril 10 de junho
- - 1994 2146 15 de fevereiro 1 de abril 3 de abril 2 de junho
- - 1995 2147 28 de fevereiro 14 de abril 16 de abril 15 de junho
- 1901* 1996 2148 20 (19*) de fevereiro 5 de abril 7 de abril 6 de junho
- 1902 1997 2149 11 de fevereiro 28 de março 30 de março 29 de maio
- 1903 1998 2150 24 de fevereiro 10 de abril 12 de abril 11 de junho
- - 1999 2151 16 de fevereiro 2 de abril 4 de abril 3 de junho
- 1904 - - 16 de fevereiro 1 de abril 3 de abril 2 de junho
- 1905 2000 2152 7 de março 21 de abril 23 de abril 22 de junho
- 1906 2001 2153 27 de fevereiro 13 de abril 15 de abril 14 de junho
1850 1907 2002 2154 12 de fevereiro 29 de março 31 de março 30 de maio
1851 - 2003 2155 4 de março 18 de abril 20 de abril 19 de junho
- 1908 - - 3 de março 17 de abril 19 de abril 18 de junho
1852 1909* 2004 2156 24 (23*) de fevereiro 9 de abril 11 de abril 10 de junho
1853 1910 2005 2157 8 de fevereiro 25 de março 27 de março 26 de maio
1854 1911 2006 2158 28 de fevereiro 14 de abril 16 de abril 15 de junho
1855 - 2007 2159 20 de fevereiro 6 de abril 8 de abril 7 de junho
- 1912 - - 20 de fevereiro 5 de abril 7 de abril 6 de junho
1856 1913* 2008 2160 5 (4*) de fevereiro 21 de março 23 de março 22 de maio
1857 1914 2009 2161 24 de fevereiro 10 de abril 12 de abril 11 de junho
1858 1915 2010 2162 16 de fevereiro 2 de abril 4 de abril 3 de junho
1859 - 2011 2163 8 de março 22 de abril 24 de abril 23 de junho
- 1916 - - 7 de março 21 de abril 23 de abril 22 de junho
1860 1917* 2012 2164 21 (20*) de fevereiro 6 de abril 8 de abril 7 de junho
1861 1918 2013 2165 12 de fevereiro 29 de março 31 de março 30 de maio
1862 1919 2014 2166 4 de março 18 de abril 20 de abril 19 de junho
1863 - 2015 2167 17 de fevereiro 3 de abril 5 de abril 4 de junho
- 1920 - - 17 de fevereiro 2 de abril 4 de abril 3 de junho
1864 1921* 2016 2168 9 (8*) de fevereiro 25 de março 27 de março 26 de maio
1865 1922 2017 2169 28 de fevereiro 14 de abril 16 de abril 15 de junho
1866 1923 2018 2170 13 de fevereiro 30 de março 1 de abril 31 de maio
1867 - 2019 2171 5 de março 19 de abril 21 de abril 20 de junho
- 1924 - - 4 de março 18 de abril 20 de abril 19 de junho
1868 1925* 2020 2172 25 (24*) de fevereiro 10 de abril 12 de abril 11 de junho
1869 - - - 9 de fevereiro 26 de março 28 de março 27 de maio
- 1926 2021 2173 16 de fevereiro 2 de abril 4 de abril 3 de junho
1870 1927 2022 2174 1 de março 15 de abril 17 de abril 16 de junho
1871 - 2023 2175 21 de fevereiro 7 de abril 9 de abril 8 de junho
- 1928 - - 21 de fevereiro 6 de abril 8 de abril 7 de junho
1872 1929* 2024 2176 13 (12*) de fevereiro 29 de março 31 de março 30 de maio
1873 - - - 25 de fevereiro 11 de abril 13 de abril 12 de junho
- 1930 2025 2177 4 de março 18 de abril 20 de abril 19 de junho
1874 1931 2026 2178 17 de fevereiro 3 de abril 5 de abril 4 de junho
1875 - 2027 2179 9 de fevereiro 26 de março 28 de março 27 de maio
- 1932 - - 9 de fevereiro 25 de março 27 de março 26 de maio
1876 1933* 2028 2180 29 (28*) de fevereiro 14 de abril 16 de abril 15 de junho
1877 1934 2029 2181 13 de fevereiro 30 de março 1 de abril 31 de maio
1878 1935 2030 2182 5 de março 19 de abril 21 de abril 20 de junho
1879 - 2031 2183 25 de fevereiro 11 de abril 13 de abril 12 de junho
- 1936 - - 25 de fevereiro 10 de abril 12 de abril 11 de junho
1880 1937* 2032 2184 10 (9*) de fevereiro 26 de março 28 de março 27 de maio
1881 1938 2033 2185 1 de março 15 de abril 17 de abril 16 de junho
1882 1939 2034 2186 21 de fevereiro 7 de abril 9 de abril 8 de junho
1883 - 2035 2187 6 de fevereiro 23 de março 25 de março 24 de maio
- 1940 - - 6 de fevereiro 22 de março 24 de março 23 de maio
1884 1941* 2036 2188 26 (25*) de fevereiro 11 de abril 13 de abril 12 de junho
1885 1942 2037 2189 17 de fevereiro 3 de abril 5 de abril 4 de junho
1886 1943 2038 2190 9 de março 23 de abril 25 de abril 24 de junho
1887 - 2039 2191 22 de fevereiro 8 de abril 10 de abril 9 de junho
- 1944 - - 22 de fevereiro 7 de abril 9 de abril 8 de junho
1888 1945* 2040 2192 14 (13*) de fevereiro 30 de março 1 de abril 31 de maio
1889 1946 2041 2193 5 de março 19 de abril 21 de abril 20 de junho
1890 1947 2042 2194 18 de fevereiro 4 de abril 6 de abril 5 de junho
1891 - 2043 2195 10 de fevereiro 27 de março 29 de março 28 de maio
- 1948 - - 10 de fevereiro 26 de março 28 de março 27 de maio
1892 1949 2044 2196 1 de março 15 de abril 17 de abril 16 de junho
1893 - - - 14 de fevereiro 31 de março 2 de abril 1 de junho
- 1950 2045 2197 21 de fevereiro 7 de abril 9 de abril 8 de junho
1894 1951 2046 2198 6 de fevereiro 23 de março 25 de março 24 de maio
1895 - 2047 2199 26 de fevereiro 12 de abril 14 de abril 13 de junho
1896 - 2048 - 18 de fevereiro 3 de abril 5 de abril 4 de junho
1897 - 2049 2060 2 de março 16 de abril 18 de abril 17 de junho
1898 - 2050 2061 22 de fevereiro 8 de abril 10 de abril 9 de junho
1899 - 2051 - 14 de fevereiro 31 de março 2 de abril 1 de junho
- - - 2062 7 de fevereiro 24 de março 26 de março 25 de maio
- - 2052 - 5 de março 19 de abril 21 de abril 20 de junho
1900 - - 2063 27 de fevereiro 13 de abril 15 de abril 14 de junho
- - 2053 2064* 18 (19*) de fevereiro 4 de abril 6 de abril 5 de junho
- - 2054 2065 10 de fevereiro 27 de março 29 de março 28 de maio
- - 2055 - 2 de março 16 de abril 18 de abril 17 de junho
- - - 2066 23 de fevereiro 9 de abril 11 de abril 10 de junho
- - 2056 - 15 de fevereiro 31 de março 2 de abril 1 de junho
- - - 2067 15 de fevereiro 1 de abril 3 de abril 2 de junho
- - 2057 2068 6 de março 20 de abril 22 de abril 21 de junho
- - 2058 2069 26 de fevereiro 12 de abril 14 de abril 13 de junho
- - 2059 2070 11 de fevereiro 28 de março 30 de março 29 de maio
- - 2071 2082 3 de março 17 de abril 19 de abril 18 de junho
- - 2072 - 23 de fevereiro 8 de abril 10 de abril 9 de junho
- - - 2083 16 de fevereiro 2 de abril 4 de abril 3 de junho
- - 2073 2084* 7 (8*) de fevereiro 24 de março 26 de março 25 de maio
- - 2074 2085 27 de fevereiro 13 de abril 15 de abril 14 de junho
1901 - 2075 - 19 de fevereiro 5 de abril 7 de abril 6 de junho
- - 2076 - 3 de março 17 de abril 19 de abril 18 de junho
- - - 2086 12 de fevereiro 29 de março 31 de março 30 de maio
- - - 2087 4 de março 18 de abril 20 de abril 19 de junho
- - 2077 2088* 23 (24*) de fevereiro 9 de abril 11 de abril 10 de junho
- - 2078 2089 15 de fevereiro 1 de abril 3 de abril 2 de junho
- - 2079 - 7 de março 21 de abril 23 de abril 22 de junho
- - 2080 - 20 de fevereiro 5 de abril 7 de abril 6 de junho
1902 - 2081 - 11 de fevereiro 28 de março 30 de março 29 de maio
- - 2090 - 28 de fevereiro 14 de abril 16 de abril 15 de junho
- - 2091 - 20 de fevereiro 6 de abril 8 de abril 7 de junho
- - 2092 - 12 de fevereiro 28 de março 30 de março 29 de maio
1903 - 2093 - 24 de fevereiro 10 de abril 12 de abril 11 de junho
- - 2094 - 16 de fevereiro 2 de abril 4 de abril 3 de junho
- - 2095 - 8 de março 22 de abril 24 de abril 23 de junho
- - 2096 - 28 de fevereiro 13 de abril 15 de abril 14 de junho
- - 2097 - 12 de fevereiro 29 de março 31 de março 30 de maio
- - 2098 - 4 de março 18 de abril 20 de abril 19 de junho
- - 2099 - 24 de fevereiro 10 de abril 12 de abril 11 de junho
- - 2100 - 9 de fevereiro 26 de março 28 de março 27 de maio
- 1949 2101 - 1 de março 15 de abril 17 de abril 16 de junho
- 1950 2102 - 21 de fevereiro 7 de abril 9 de abril 8 de junho
- 1951 2103 - 6 de fevereiro 23 de março 25 de março 24 de maio
- 1952 2104 - 26 de fevereiro 11 de abril 13 de abril 12 de junho
- 1953 2105 - 17 de fevereiro 3 de abril 5 de abril 4 de junho
- 1954 2106 - 2 de março 16 de abril 18 de abril 17 de junho
- 1955 2107 - 22 de fevereiro 8 de abril 10 de abril 9 de junho
- 1956 2108 - 14 de fevereiro 30 de março 1 de abril 31 de maio
- 1957 2109 - 5 de março 19 de abril 21 de abril 20 de junho
- 1958 2110 2200 18 de fevereiro 4 de abril 6 de abril 5 de junho
- 1959 2111 - 10 de fevereiro 27 de março 29 de março 28 de maio
- 1960 2112 - 1 de março 15 de abril 17 de abril 16 de junho
- 1961 2113 - 14 de fevereiro 31 de março 2 de abril 1 de junho
- 1962 2114 - 6 de março 20 de abril 22 de abril 21 de junho
- 1963 2115 - 26 de fevereiro 12 de abril 14 de abril 13 de junho
- 1964 2116 - 11 de fevereiro 27 de março 29 de março 28 de maio
- 1965 2117 - 2 de março 16 de abril 18 de abril 17 de junho
- 1966 2118 - 22 de fevereiro 8 de abril 10 de abril 9 de junho
- 1967 2119 - 7 de fevereiro 24 de março 26 de março 25 de maio
- 1968 2120 - 27 de fevereiro 12 de abril 14 de abril 13 de junho
- 1969 2121 - 18 de fevereiro 4 de abril 6 de abril 5 de junho
- 1970 2122 - 10 de fevereiro 27 de março 29 de março 28 de maio
- 1971 2123 - 23 de fevereiro 9 de abril 11 de abril 10 de junho
- 1972 2124 - 15 de fevereiro 31 de março 2 de abril 1 de junho
- 1973 2125 - 6 de março 20 de abril 22 de abril 21 de junho
- 1974 2126 - 26 de fevereiro 12 de abril 14 de abril 13 de junho
- 1975 2127 - 11 de fevereiro 28 de março 30 de março 29 de maio
- 1976 2128 - 2 de março 16 de abril 18 de abril 17 de junho
- 1977 2129 - 22 de fevereiro 8 de abril 10 de abril 9 de junho
- 1978 2130 - 7 de fevereiro 24 de março 26 de março 25 de maio
- 1979 2131 - 27 de fevereiro 13 de abril 15 de abril 14 de junho
- 1980 2132 - 19 de fevereiro 4 de abril 6 de abril 5 de junho
- 1981 2133 2201 3 de março 17 de abril 19 de abril 18 de junho
- 1982 2134 2202 23 de fevereiro 9 de abril 11 de abril 10 de junho
- 1983 2135 2203 15 de fevereiro 1 de abril 3 de abril 2 de junho
- 1984 2136 2204 6 de março 20 de abril 22 de abril 21 de junho
- 1985 2137 2205 19 de fevereiro 5 de abril 7 de abril 6 de junho
- 1986 2138 2206 11 de fevereiro 28 de março 30 de março 29 de maio
- 1987 2139 2207 3 de março 17 de abril 19 de abril 18 de junho
1904 1988 2140 2208 16 de fevereiro 1 de abril 3 de abril 2 de junho
- 1989 2141 2209 7 de fevereiro 24 de março 26 de março 25 de maio
Nota: Para anos assinalados com asterisco (*) o Carnaval calha no dia assinalado entre parênteses.

Uma forma de aplicação do Algoritmo de Meeus/Jones/Butcher, direta e acessível para a maioria das pessoas que utilizam computadores, é a adaptação de Claytom Valle para ser mostrada numa única célula da planilha Excel®, da Microsoft. Basta copiar o conjunto abaixo (exatamente como mostrado, sem espaços) e colar na célula onde se espera que seja exibida a data da Páscoa. Nesse exemplo, considerou-se uma célula chamada "Ano" (definida através da opção "Definir Nome" do Excel®), mas pode-se substituir todas as palavras "Ano" pela célula que contenha o ano desejado (como por exemplo "A1", sem aspas):

=DATA(ano;INT((MOD((19*(MOD(ano;19))+(INT(ano/100))-(INT(INT(ano/100)/4))-(INT((INT(ano/100)-(INT((INT(ano/100)+8)/25))+1)/3))+15);30)+MOD((32+(2*MOD(INT(ano/100);4))+(2*INT(MOD(ano;100)/4))-(MOD((19*(MOD(ano;19))+(INT(ano/100))-(INT(INT(ano/100)/4))-(INT((INT(ano/100)-(INT((INT(ano/100)+8)/25))+1)/3))+15);30))-(MOD(MOD(ano;100);4)));7)-(7*INT(((MOD(ano;19))+(11*MOD((19*(MOD(ano;19))+(INT(ano/100))-(INT(INT(ano/100)/4))-(INT((INT(ano/100)-(INT((INT(ano/100)+8)/25))+1)/3))+15);30))+(22*MOD((32+(2*MOD(INT(ano/100);4))+(2*INT(MOD(ano;100)/4))-(MOD((19*(MOD(ano;19))+(INT(ano/100))-(INT(INT(ano/100)/4))-(INT((INT(ano/100)-(INT((INT(ano/100)+8)/25))+1)/3))+15);30))-(MOD(MOD(ano;100);4)));7)))/451))+114)/31);MOD((MOD((19*(MOD(ano;19))+(INT(ano/100))-(INT(INT(ano/100)/4))-(INT((INT(ano/100)-(INT((INT(ano/100)+8)/25))+1)/3))+15);30)+MOD((32+(2*MOD(INT(ano/100);4))+(2*INT(MOD(ano;100)/4))-(MOD((19*(MOD(ano;19))+(INT(ano/100))-(INT(INT(ano/100)/4))-(INT((INT(ano/100)-(INT((INT(ano/100)+8)/25))+1)/3))+15);30))-(MOD(MOD(ano;100);4)));7)-(7*INT(((MOD(ano;19))+(11*MOD((19*(MOD(ano;19))+(INT(ano/100))-(INT(INT(ano/100)/4))-(INT((INT(ano/100)-(INT((INT(ano/100)+8)/25))+1)/3))+15);30))+(22*MOD((32+(2*MOD(INT(ano/100);4))+(2*INT(MOD(ano;100)/4))-(MOD((19*(MOD(ano;19))+(INT(ano/100))-(INT(INT(ano/100)/4))-(INT((INT(ano/100)-(INT((INT(ano/100)+8)/25))+1)/3))+15);30))-(MOD(MOD(ano;100);4)));7)))/451))+114);31)+1)

Observação: devido à limitação do Excel em relação à Função "Data", a fórmula acima só funciona entre os anos 1900 e 9999.

Abaixo, o Algoritmo convertido para a linguagem "Transact-SQL Server". Poderá também ser adaptado para qualquer outra linguagem de programação:

 CREATE FUNCTION fncPascoa (@ANO int)
 RETURNS datetime
 AS
 BEGIN
 DECLARE @DATA AS DATETIME
 DECLARE @MES AS INT
 DECLARE @DIA AS INT
 DECLARE @A AS INT
 DECLARE @B AS INT
 DECLARE @C AS INT
 DECLARE @D AS INT
 DECLARE @E AS INT
 DECLARE @F AS INT
 DECLARE @G AS INT
 DECLARE @H AS INT
 DECLARE @I AS INT
 DECLARE @K AS INT
 DECLARE @L AS INT
 DECLARE @M AS INT
 SET @A = @ANO%19
 SET @B = @ANO/100
 SET @C = @ANO%100
 SET @D = @B/4
 SET @E = @B%4
 SET @F = (@B+8)/25
 SET @G = (@B-@F+1)/3
 SET @H = (19*@A+@B-@D-@G+15)%30
 SET @I = @C/4
 SET @K = @C%4
 SET @L = (32+2*@E+2*@I-@H-@K)%7
 SET @M = (@A+11*@H+22*@L)/451
 SET @MES = (@H+@L-7*@M+114)/31
 SET @DIA = ((@H+@L-7*@M+114)%31)+1
 SET @DATA = CAST((LTRIM(RTRIM(CAST(@ANO AS CHAR)))) + '-' + 
 (LTRIM(RTRIM(CAST(@MES AS CHAR)))) + '-' + 
 (LTRIM(RTRIM(CAST(@DIA AS CHAR)))) AS DATETIME)
 RETURN(@DATA)
 END;
 GO

Exemplo de códico em R

  require(lubridate)
  easterDay <- function(year){
  a <- year %% 19
  b <- floor(year / 100)
  c <- year %% 100
  
  d <- floor(b / 4)
  e <- b %% 4
  
  f <- floor((b + 8) / 25)
  
  g <- floor((b - f + 1)/3)
  
  h <- (19*a + b - d - g + 15) %% 30
  
  i <- floor(c / 4)
  k <- c %% 4 
  
  l <- (32 + 2 * e + 2 * i - h - k) %% 7
  
  m <- floor((a + 11*h + 22*l)/451)
  
  n <- floor((h + l - 7*m + 114)/31)
  
  p <- (h + l - 7*m + 114) %% 31
  
  return(c(as.character(month(n, label = TRUE)), p + 1))  
}

Exemplo de utilização, easterDay(2018), retorna o vetor "Apr" "1".

Exemplo de código em C#

public static string Calcula(int nAno) {
  int nRest = (nAno % 19) + 1;
  DateTime oDia = new DateTime();
  switch (nRest) {
    case  1: oDia = new System.DateTime(nAno, 4, 14, 0, 0, 0, 0); break;
    case  2: oDia = new System.DateTime(nAno, 4,  3, 0, 0, 0, 0); break;
    case  3: oDia = new System.DateTime(nAno, 3, 23, 0, 0, 0, 0); break;
    case  4: oDia = new System.DateTime(nAno, 4, 11, 0, 0, 0, 0); break;
    case  5: oDia = new System.DateTime(nAno, 3, 31, 0, 0, 0, 0); break;
    case  6: oDia = new System.DateTime(nAno, 4, 18, 0, 0, 0, 0); break;
    case  7: oDia = new System.DateTime(nAno, 4,  8, 0, 0, 0, 0); break;
    case  8: oDia = new System.DateTime(nAno, 3, 28, 0, 0, 0, 0); break;
    case  9: oDia = new System.DateTime(nAno, 4, 16, 0, 0, 0, 0); break;
    case 10: oDia = new System.DateTime(nAno, 4,  5, 0, 0, 0, 0); break;
    case 11: oDia = new System.DateTime(nAno, 3, 25, 0, 0, 0, 0); break;
    case 12: oDia = new System.DateTime(nAno, 4, 13, 0, 0, 0, 0); break;
    case 13: oDia = new System.DateTime(nAno, 4,  2, 0, 0, 0, 0); break;
    case 14: oDia = new System.DateTime(nAno, 3, 22, 0, 0, 0, 0); break;
    case 15: oDia = new System.DateTime(nAno, 4, 10, 0, 0, 0, 0); break;
    case 16: oDia = new System.DateTime(nAno, 3, 30, 0, 0, 0, 0); break;
    case 17: oDia = new System.DateTime(nAno, 4, 17, 0, 0, 0, 0); break;
    case 18: oDia = new System.DateTime(nAno, 4,  7, 0, 0, 0, 0); break;
    case 19: oDia = new System.DateTime(nAno, 3, 27, 0, 0, 0, 0); break;
  }
  string cRet = ""; 
  for (int n = 1; n <= 13; n++) {
    oDia= oDia.AddDays(1);
    if (oDia.DayOfWeek == DayOfWeek.Sunday) {
      cRet = oDia.Day.ToString();
      cRet += oDia.Month == 3 ? " de março" : " de abril";
    
      return cRet;
    }
  } 
  return "";
}


Exemplo de código em PHP, o PHP possui nativamente um recurso para obter a data da páscoa, sendo:

date("d-m-Y", easter_date($Ano));

Porém, a função easter_date() pode retornar a data incorreta dependendo do fuso horário do servidor. Para corrigir isto, pode-se usar o seguinte código (compatível com PHP 5.3+):

function findPascoa($ano)
{
  $date = new DateTime('now', new DateTimeZone('UTC'));
  $date->setTimestamp(easter_date($ano));
  return $date->format('d-m-Y');
}

Exemplo manual de cálculo para obter a data da Páscoa:

/**
  * Anos de 1582 a 1599 X=22 e Y=2
  * Anos de 1600 a 1699 X=22 e Y=2
  * Anos de 1700 a 1799 X=23 e Y=3
  * Anos de 1800 a 1899 X=24 e Y=4
  * Anos de 1900 a 1999 X=24 e Y=5
  **> Anos de 2000 a 2099 X=24 e Y=5 <**
  * Anos de 2100 a 2199 X=24 e Y=6
  * Anos de 2200 a 2299 X=25 e Y=7
  * 
  */
function findPascoa($ano)
{
  $X = 24;
  $Y = 5;

  $a = ($ano % 19);
  $b = ($ano % 4);
  $c = ($ano % 7);
  $d = ((19 * $a + $X) % 30);
  $e = ((2 * $b + 4 * $c + 6 * $d + $Y) % 7);
  
  if (($d + $e) > 9) { $dia = ($d + $e - 9); $mes = 4; } else { $dia = ($d + $e + 22); $mes = 3; }
  if (($dia == 26) AND ($mes == 4)) { $dia = 19; }
  if (($dia == 25) AND ($mes == 4) AND ($d == 28) AND ($a > 10)) { $dia = 18; }
  
  return sprintf("%02d-%02d-%04d", $dia, $mes, $ano);
}

PL/SQL

editar

Exemplo de código em PL/SQL

 SET SERVEROUTPUT ON;
 DECLARE
 MES number;
 DIA number;
 A   number;
 B   number;
 C   number;
 D   number;
 E   number;
 F   number;
 G   number;
 H   number;
 I   number;
 K   number;
 L   number;
 M   number;
 ANO NUMBER;
 DATA_PASCOA DATE;
BEGIN
    ANO:= 2021; /*ESTE PARAMETRO EH O ANO PARA O QUAL SE DESEJA CALCULAR A DATA DE PASCOA*/
    A := MOD(ANO, 19);
    B := TRUNC(ANO/100);
    C := MOD(ANO, 100);
    D := TRUNC(B/4);
    E := MOD(B, 4);
    F := TRUNC((B+8)/25);
    G := TRUNC((B-F+1)/3);
    H := MOD((19*A+B-D-G+15), 30);
    I := TRUNC(C/4);
    K := MOD(C, 4);
    L := MOD((32+2*E+2*I-H-K),7);
    M := TRUNC((A+11*H+22*L)/451);
    MES := TRUNC((H+L-7*M+114)/31);
    DIA := MOD((H+L-7*M+114), 31) + 1;
    
    /*
    SYS.DBMS_OUTPUT.put_line('A= '||A);
    SYS.DBMS_OUTPUT.put_line('B= '||B);
    SYS.DBMS_OUTPUT.put_line('C= '||C);
    SYS.DBMS_OUTPUT.put_line('D= '||D);
    SYS.DBMS_OUTPUT.put_line('E= '||E);
    SYS.DBMS_OUTPUT.put_line('F= '||F);
    SYS.DBMS_OUTPUT.put_line('G= '||G);
    SYS.DBMS_OUTPUT.put_line('H= '||H);
    SYS.DBMS_OUTPUT.put_line('I= '||I);
    SYS.DBMS_OUTPUT.put_line('K= '||K);
    SYS.DBMS_OUTPUT.put_line('L= '||L);
    SYS.DBMS_OUTPUT.put_line('M= '||M);
    */
 
    DATA_PASCOA := TO_DATE(LPAD(DIA,2,'0')||'/'||LPAD(MES,2,'0')||'/'||ANO, 'DD/MM/YYYY');
 
    SYS.DBMS_OUTPUT.put_line('DATA_PASCOA = '||DATA_PASCOA );
 
 END;
 /

Exemplo de código em Java

/*
@param ano o ano para calcular 
*/
private void dataPascoa_Carnaval(int ano) {
	GregorianCalendar data_Pascoa = new GregorianCalendar();
	GregorianCalendar data_Carnaval = new GregorianCalendar();
	GregorianCalendar data_CorpusChristi = new GregorianCalendar();
	GregorianCalendar data_SextaFeiraSanta = new GregorianCalendar();

		int a = ano % 19;
		int b = ano / 100;
		int c = ano % 100;
		int d = b / 4;
		int e = b % 4;
		int f = (b + 8) / 25;
		int g = (b - f + 1) / 3;
		int h = (19 * a + b - d - g + 15) % 30;
		int i = c / 4;
		int k = c % 4;
		int l = (32 + 2 * e + 2 * i - h - k) % 7;
		int m = (a + 11 * h + 22 * l) / 451;
		int mes = (h + l - 7 * m + 114) / 31;
		int dia = ((h + l - 7 * m + 114) % 31) + 1;

		data_Pascoa.set(Calendar.YEAR, ano);
		data_Pascoa.set(Calendar.MONTH, mes-1);
		data_Pascoa.set(Calendar.DAY_OF_MONTH, dia);
		
		//Carnaval 47 dias antes da pascoa
		data_Carnaval.setTimeInMillis(data_Pascoa.getTimeInMillis());
		data_Carnaval.add(Calendar.DAY_OF_MONTH, -47);
		//CorpusChristi 60 dias apos a pascoa
		data_CorpusChristi.setTimeInMillis(data_Pascoa.getTimeInMillis());
		data_CorpusChristi.add(Calendar.DAY_OF_MONTH, 60);
		
		data_SextaFeiraSanta.setTimeInMillis(data_Pascoa.getTimeInMillis());
		data_SextaFeiraSanta.add(Calendar.DAY_OF_MONTH, -2);
	}

JavaScript

editar

Exemplo de código em Javascript

function easterSunday (year) {
 var X=0;
 var Y=0;
 
 if (year>=1582 && year<=1699){X = 22; Y = 2;}
 if (year>=1700 && year<=1799){X = 23; Y = 3;}
 if (year>=1800 && year<=1899){X = 23; Y = 4;}
 if (year>=1900 && year<=2099){X = 24; Y = 5;}
 if (year>=2100 && year<=2199){X = 24; Y = 6;}
 if (year>=2200 && year<=2299){X = 25; Y = 7;}
 
 var a = yeara% 19;
 var b = yearv% 4;
 var c = year % 7;
 var d = ((19*a)+X)d% 30;
 var e = (((2*b)+(4*c)+(6*d)+Y))%7;
 
 var day;
 var month;
 if ((d+e)<10) { 
 day = d+e+22; 
 month = 3;
 }
 else {
 day = d+e-9; 
 month = 4;
 }
 //26 of april 2076
 if (day==26 && month==4) {
 day = 19;
 }
 
 //25 of april 2049
 if (day==25 && month==4 && d==28 && a>10) {
 day = 18;
 }
 
 return new Date(year, month-1, day, 0, 0, 0, 0);
}

Excel®

editar

Há tres formas mais simples utilizando funções do Excel® para retornar a data da páscoa, sendo a segunda bastante curiosa. Ambas consideram que na célula "A1" esteja o ano desejado, mas apenas funcionam entre os anos 1900 e 9999.

A primeira fórmula:

=ARRED(DATA(A1;4;1)/7+MOD(19*MOD(A1;19)-7;30)*14%;0)*7-6 
Excel versão português europeu substituir MOD por RESTO

A segunda fórmula:

=MOEDA(("4/"&A1)/7+MOD(19*MOD(A1;19)-7;30)*14%;)*7-6 
Excel versão português europeu substituir MOD por RESTO

A terceira fórmula:

=ARREDMULTB(DIA(MINUTO(A1/38)/2+56)&"/5"&"/"&A1;7)-34 
Excel versão português europeu substituir ARREDMULTB por ARRED.DEFEITO


Para retornar o dia do carnaval, basta subtrair 47 dias da data da Páscoa. Corpus Christi pode ser obtido somando-se 60 dias à data da Páscoa.

SQLite

editar

Exemplo de código para cálculo da data da Páscoa em 2018:

SELECT
  DATE(anoMesDia, "+" || (7 - STRFTIME("%w", anoMesDia)) || " days") AS pascoa
FROM (
  SELECT
  ano || SUBSTR(mesDia, 1 + (ano % 19) * 6, 6) AS anoMesDia
  FROM (
  SELECT
  "-04-14-04-03-03-23-04-11-03-31-04-18-04-08-03-28-04-16-04-05-03-25-04-13-04-02-03-22-04-10-03-30-04-17-04-07-03-27" AS mesDia,
  2018 AS ano));

Referências

  1. Astronomical Society of South Australia. «List of Easter Sunday Dates». Consultado em 9 de abril de 2015 
  2. Art Johnson (1999). Famous Problemas and Their Mathematicians. Greenwood Village, Colorado: Teachers Ideas press. pp. 11,12. ISBN 978-1563084461 
  3. Jean Meeus (1991). Astronomical Algorithms. Richmond, Virginia: Willmann-Bell. p. 67–68 
  4. GM Arts. «Easter Sunday Date FAQ». Consultado em 11 de abril de 2015 
 
O Commons possui uma categoria com imagens e outros ficheiros sobre Cálculo da Páscoa