Calendário e cálculo do dia da semana
Muita gente pergunta que dia vai cair dia 31 de determinado mês. A resposta depende basicamente do ano e do mês em questão. O calendário gregoriano segue regras fixas, então o cálculo é determinístico, mas existem armadilhas que passam despercebidas até você se queimar.
como saber que dia vai cair dia 31 de qualquer mês
O caminho mais direto é usar o método dos pontos fixos (Doomsday), desenvolvido por John Horton Conway. A ideia central é simples: cada mês tem um "dia ancorado" que cai no mesmo dia da semana dentro daquele ano. Se você souber o dia da semana da âncora, consegue determinar qualquer data daquele mês rapidamente. As âncoras mensais mais úteis para quem precisa saber o dia 31 são as seguintes. Janeiro: o dia 3 de anos comuns e 4 em anos bissextos. Fevereiro: o último dia do mês (28 ou 29). Março: 7. Abril: 4. Maio: 9. Junho: 6. Julho: 11. Agosto: 8. Setembro: 5. Outubro: 10. Novembro: 7. Dezembro: 12.
Para o dia 31 especificamente, a lógica mais direta funciona assim. Se o mês tem 31 dias, basta subtrair 28 do dia 31, ou seja, ir 4 dias após a âncora do mês. Se a âncora de determinado mês cair numa terça, o dia 31 cairá na sexta daquele mesmo mês. A subtração de 28 é válida porque 28 é múltiplo de 7, então não altera o dia da semana. Vou dar um exemplo concreto. Em julho de 2026, a âncora é o dia 11. Vamos descobrir que dia da semana é 11 de julho de 2026 primeiro. O método do Doomsday calcula o dia da semana base do ano. Para 2026, a base do século XXI é 2 (terça-feira). O ano dentro do século é 26. Dividimos 26 por 16, dá 1. Soma-se 26, resulta 27. Dividimos 27 por 4, dá 6. Somamos tudo: 2 mais 26 mais 1 mais 6 é igual a 35. Dividimos 35 por 7 e o resto é 0. Isso significa que o dia da semana base de 2026 é domingo. Julho tem âncora no dia 11, então 11 de julho de 2026 cai num domingo. O dia 31 de julho é 20 dias depois, o que equivale a mover 6 dias na semana (20 mod 7 é 6). Domingo mais 6 dias é sábado. Dezembro de 2026 também cai no sábado, pelo mesmo raciocínio aplicado à âncora do dia 12.
Se você prefere não fazer conta na mão, existe uma fórmula direta chamada congruência de Zeller, que funciona para qualquer data do calendário gregoriano. A versão adaptada para o dia da semana é: h = (q + floor(13(m+1)/5) + K + floor(K/4) + floor(J/4) - 2J) mod 7
Nesta fórmula, q é o dia do mês, m é o mês ajustado onde janeiro e fevereiro são tratados como meses 13 e 14 do ano anterior, K é o ano dentro do século e J é o século em si. O resultado h varia de 0 a 6, sendo 0 igual a sábado, 1 a domingo, e assim por diante. Essa é a fórmula que a maioria das bibliotecas de programação usa por baixo dos panos.
👉 Clique no botão abaixo para saber mais sobre o assunto!
experiência prática com edge cases
A primeira vez que precisei confiar cegamente nesse tipo de cálculo foi num projeto de automação de escalas hospitalares há alguns anos. Tínhamos um sistema que gerava lotações mensais e um bug silencioso fazia com que, em determinados meses e anos, a escala do dia 31 ficasse atribuída ao funcionário errado. A causa raiz era um código que usava como referência o dia 30 e somava 1, sem verificar explicitamente se o mês realmente possuía 31 dias. Em fevereiro, isso gerava um estouro silencioso que avançava para o mês seguinte nos dados, corrompendo toda a alocação de março. A correção foi implementar uma validação explícita do número de dias no mês antes de qualquer operação aritmética, além de usar uma função de biblioteca que já calcula o último dia válido do mês. O workaround imediato foi adicionar um teste de unidade que verifica a presença dos meses com 28, 29, 30 e 31 dias em um ciclo de 400 anos, cobrindo o ciclo completo do calendário gregoriano. Isso capturou todos os casos borda que passavam despercebidos.
insights contra-intuitivos que iniciantes ignoram
Uma coisa que pouca gente leva a sério é o fato de que o ciclo completo do calendário gregoriano só se repete exatamente a cada 400 anos. Isso significa que padrões que parecem se repetir a cada 28 anos, como muitos ensinam de forma simplificada, na verdade falham nos anos divisíveis por 100 que não são divisíveis por 400. O ano 1900 não foi bissex-to, mas 2000 foi. Se você aplicar uma regra de repetição de 28 anos cruzando esses limites, o cálculo do dia da semana para o dia 31 de fevereiro (ou qualquer outra data) sai errado em um ponto específico dentro do ciclo. Outro erro comum é tratar janeiro e fevereiro como meses normais nas fórmulas. A convenção matemática padrão exige que janeiro seja o décimo terceiro mês e fevereiro o décimo quarto do ano anterior. Ignorar isso na congruência de Zeller produz resultados inconsistentes em cerca de 16,7 por cento dos casos, já que esses dois meses representam exatamente dois dos doze meses do ano.
Existe também uma propriedade útil que muitos calculadores manuais desconhecem. Em qualquer ano não bissexto, os meses que começam no mesmo dia da semana são: abril e julho, e janeiro e outubro. Nos anos bissextos, essa correspondência muda ligeiramente, e janeiro e abril passam a começar no mesmo dia. Saber isso permite verificar rapidamente se seu cálculo está coerente sem precisar refazer toda a conta.
limitações reais do cálculo manual
O método manual funciona bem para datas recentes e para quem já treinou bastante, mas ele tem gargalos claros. A principal limitação é a carga cognitiva. Manter a âncora de cada mês na cabeça exige prática. Para datas fora do intervalo atual, como séculos passados ou futuros distantes, o risco de erro aumenta significativamente porque a referência do século muda e a correção de ano bissexto adicional (divisível por 400) entra em jogo. Para uso profissional ou repetido, a recomendação é abandonar o cálculo manual e usar uma biblioteca adequada. No Python, a função datetime.date(year, month, 31).strftime("%A") resolve tudo de forma confiável. No JavaScript, new Date(year, month - 1, 31).toLocaleDateString("pt-BR", { weekday: "long" }) faz o mesmo. Essas bibliotecas já embutem todas as regras do calendário gregoriano, incluindo a correção dos anos bissextos nos divisíveis por 100 e 400, e são validadas contra testes de 400 anos.
alternativas quando você não tem acesso a código
Se o contexto é puramente pessoal, como organizar férias ou marcar um compromisso recorrente que acontece todo dia 31, a opção mais prática é consultar uma tabela permanente de calendários ou um site confiável. Isso evita esforço desnecessário. As tabelas de calendários perpétuos que circulam na internet geralmente cobrem de 1900 a 2099 e resolvem a grande maioria dos casos do dia a dia sem necessidade de fórmula alguma. Para quem trabalha com dados e precisa processar milhares de datas automaticamente, o caminho correto continua sendo a biblioteca de calendário da linguagem em uso. O ganho de tempo é real: substituir uma verificação manual que levaria minutos por uma linha de código que retorna o resultado em microssegundos, com margem de erro praticamente zero quando a biblioteca é amplamente testada.