Calculando quantos dias faltam para Páscoa: o que funciona na prática
Você provavelmente já viu por aí tabelas bonitinhas com a contagem regressiva para o feriado. Mas quando você tenta fazer isso funcionar de verdade num sistema real, ou num script que precisa rodar em qualquer ano, as coisas ficam mais chatas do que parecem. O cálculo da data da Páscoa não é trivial, e muita gente subestima isso até levar um calote com datas erradas.
Quanto dia faltam para páscoa
O cerne da questão é o computus, o conjunto de regras astronômico-religiosas usado desde o Concílio de Nicéia em 325 d.C. para determinar a data da Páscoa. A regra oficial no calendário gregoriano diz que a Páscoa cai no primeiro domingo após a primeira lua cheia que acontece depois ou no dia do equinócio da primavera no hemisfério norte (fixado arbitrariamente em 21 de março). A "lua cheia" aqui é a lua cheia eclesiástica, que é uma média astronômica, não a data real observada no céu. É essa discrepância que quebra implementações amadoras. O algoritmo mais usado na prática é o algoritmo de Meeus-Jones-Butcher, que opera apenas com aritmética modular e funciona perfeitamente para qualquer ano entre 1900 e 2099 sem problemas. A versão em Python que eu uso nos meus projetos é esta:
def calcular_pascoa(ano): a = ano % 19
b = ano // 100 c = ano % 100
d = b // 4 e = b % 4
f = (b + 8) // 25 g = (b - f + 1) // 3
👉 Clique no botão abaixo para saber mais sobre o assunto!
h = (19 * a + b - d - g + 15) % 30 i = c // 4
k = c % 4 l = (32 + 2 * e + 2 * i - h - k) % 7
m = (a + 11 * h + 22 * l) // 451 mes = (h + l - 7 * m + 114) // 31
dia = ((h + l - 7 * m + 114) % 31) + 1 return datetime(ano, mes, dia)
Depois que você tem a data da Páscoa, subtrair da data atual e pegar o .days é trivial. O problema é que essa abstração simples esconde algumas armadilhas sérias. Eu tive um projeto interno onde precisávamos disparar notificações automáticas baseadas na contagem regressiva para Páscoa. A implementação inicial usava uma biblioteca chamada ephem que calculava a fase lunar real com dados astronômicos de satélite. Funcionou bem por dois anos. Depois, começou a dar Páscoa errada em 2018 e 2019. O problema? A lua cheia real e a lua cheia eclesiástica são coisas diferentes. Em 2018, a lua cheia real aconteceu antes do equinócio astronômico, mas a lua cheia eclesiástica (baseada na tabela medieval) ainda estava "válida" depois do equinócio. A biblioteca astronômica pura respeita o céu real; a Igreja não. O correto foi trocar para o algoritmo de Meeus-Jones-Butcher, que replica exatamente a tabela eclesiástica, e o erro sumiu.
Outra coisa que quase ninguém menciona: a Páscoa ortodoxa não segue o mesmo calendário. Ela usa o calendário juliano para o equinócio e tabelas lunares diferentes. Se você tem uma base de usuários que inclui comunidades ortodoxas, uma única função calcular_pascoa() não resolve. A Páscoa ortodoxa pode cair até cinco semanas depois da data católica/protestante. Eu cheguei a implementar um fork do algoritmo com as correções de +13 dias no equinócio (para o atraso juliano vs. gregoriano) e uma fórmula diferente para a lua cheia, mas o jeito mais seguro é usar uma biblioteca especializada como a pydateutil ou o módulo orthodox_easter do CPAN (sim, tem versão Python também). Não reinvente isso. Se você quer apenas saber a data de Páscoa de um ano específico sem escrever código, a Enciclopédia Britânica e o Time and Date (timeanddate.com) mantêm tabelas oficiais confiáveis. Para uso programático, a melhor opção que eu conheço é a biblioteca ephem com o argumento easter(), mas lembre-se: ela retorna a Páscoa gregoriana corretamente, enquanto versões mais antigas tinham bugs na transição de séculos. Teste sempre contra uma tabela de referência conhecida.
O lado ruim de depender de tabelas prontas é que elas podem quebrar silenciosamente quando o ano sai da faixa testada. O algoritmo de Meeus-Jones-Butcher, por exemplo, é matematicamente comprovado para o de 1900 a 2099, mas fora disso ele começa a desviar porque o calendário gregoriano foi ajustado em 1582 e as regras lunares têm correções seculares que o algoritmo simples não captura. Se você precisa de datas anteriores a 1900 ou posteriores a 2099, use a função pychart.easter() do pacote python-dateutil ou o módulo fastdate, que implementam as correções seculares completas. Resumo sem rodeio: para a maioria dos casos, use o algoritmo de Meeus-Jones-Butcher. Não use astronomia real para calcular a Páscoa cristã, porque a Igreja não usa astronomia real. E se o seu público inclui ortodoxos, duplique o esforço.