Top Qs
Linha do tempo
Chat
Contexto
Cálculo da Páscoa
Cálculo do dia em que deve acontecer a Páscoa Da Wikipédia, a enciclopédia livre
Remove ads
Remove ads
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.


A Páscoa é celebrada no primeiro domingo após a primeira lua cheia que ocorre no dia do equinócio da Primavera, ou logo a seguir, (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 do domingode Páscoa pode variar entre as datas extremas de 22 de Março e de 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]
Remove ads
Cálculo da data da Páscoa recorrendo a tabela simples
Resumir
Perspectiva
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 áureo que quer dizer "número dourado" pelo seu valor co cômputo pascal que corresponde a uma data específica dada na tabela abaixo. Esse número áureo corresponde à data da Lua cheia pascal. 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 procura-se o domingo seguinte. A Páscoa em 2020 será no dia 12 de abril, já que o dia 8 é uma quarta-feira.
Remove ads
Cálculo da data da Páscoa recorrendo a algoritmos
Resumir
Perspectiva
Algoritmo de Gauss
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.
a = ANO MOD 19 b = ANO MOD 4 c = ANO MOD 7 No calendário gregoriano: k = ANO / 100 p = (13 + 8*k) / 25 q = k / 4 M = (15 - p + k - q) MOD 30 N = (4 + k - q) MOD 7 No calendário Juliano: M = 15 N = 6 d = ((19*a) + M) MOD 30 e = ((2*b) + (4*c) + (6*d) + N) MOD 7 março = 22 + d + e abril = d + e - 9 SE abril == 25 E d == 28 E e == 6 E (11*M + 11) MOD 30 < 19 : abril = 18 SE abril == 26 E d == 29 E e == 6 : abril = 19 SE março ≤ 31 : mês = 3 dia = março SENÃO : mês = 4 dia = abril
- exemplos:
- Para o ano de 2025:
- a=2025 MOD 19 = 11
- b=2025 MOD 4 = 1
- c=2025 MOD 7 = 2
- d=(19 * 11 + 24) MOD 30 = 23
- e=(2 * 1 + 4 *2 + 6 * 23 + 5) MOD 7 = 6
- (d + e) = 23 + 6 = 29
- Logo, o Domingo de Páscoa calha 29 dias depois de 22/3/2025, ou seja a 20 de abril de 2025
Algoritmo de Meeus/Jones/Butcher
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"[2]:
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.
Remove ads
Datas dos feriados móveis
Resumir
Perspectiva
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. [3]
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
R
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".
C#
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 "";
}
PHP
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
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;
/
JAVA
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
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®
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
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));
Remove ads
Referências
- Astronomical Society of South Australia. «List of Easter Sunday Dates». Consultado em 9 de abril de 2015
- Jean Meeus (1991). Astronomical Algorithms. Richmond, Virginia: Willmann-Bell. p. 67–68
- GM Arts. «Easter Sunday Date FAQ». Consultado em 11 de abril de 2015
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads