Como descobrir que dia cai uma sexta-feira qualquer
Você precisa saber exatamente que dia que é sexta-feira — ou mais especificamente, em que data do mês ela cai — e isso parece simples até você começar a contar nos dedos ou usar o calendário errado. O método mais confiável que eu descobri envolve o algoritmo de Zeller, mas muita gente prefere simplesmente memorizar algumas datas âncora e calcular a partir delas. Vou mostrar os dois jeitos, porque cada um serve para uma situação diferente. A primeira coisa que muita gente não considera é que o Zeller foi feito para datas do calendário gregoriano, então se você está lidando com datas antes de 1582 ou com calendários diferentes, os resultados já não valem mais nada. Eu aprendi isso na marra quando precisei consultar datas de processos judiciais que usavam o calendário juliano para registros antigos e acabei com dias da semana completamente errados por quase duas horas.
que dia que é sexta-feira
Vamos começar pelo mais prático. O algoritmo de Zeller para o calendário gregoriano funciona assim: pegue o dia do mês, o mês e o ano. Se o mês for janeiro ou fevereiro, trate-os como meses 13 e 14 do ano anterior. A fórmula é h = (q + 13(m+1)/5 + K + K/4 + J/4 - 2J) mod 7, onde q é o dia, m é o mês ajustado, K é o ano dentro do século (ano mod 100) e J é o zero-based century (ano dividido por 100). O resultado h dá 0 = sábado, 1 = domingo, 2 = segunda, e assim por diante até 6 = sexta-feira. Veja um exemplo concreto. Eu queria saber que dia que é sexta-feira no dia 19 de setembro de 2025 para marcar um praso de entrega. Mês 9 já é setembro, então m = 9, q = 19, K = 25, J = 20. Aplicando: h = (19 + 13×10/5 + 25 + 25/4 + 20/4 - 2×20) mod 7. Isso dá (19 + 26 + 25 + 6 + 5 - 40) mod 7 = 35 mod 7 = 0, que corresponde a sábado. Espera, isso não bate. Recalculei e percebi que cometi um erro de conta no primeiro passeio — o resultado correto é 1, que é domingo. Na verdade, 19 de setembro de 2025 é um sábado mesmo, então o cálculo inicial estava certo, apenas meu interpretador inicial tinha trocado o índice. O ponto é que um erro de sinal ou de arredondamento faz o resultado cair no dia errado, e isso não é raro em cálculos manuais.
Para quem não quer lidar com fórmulas, existe uma alternativa muito mais rápida: a regra da data âncora. Você decora que 1º de janeiro de 2000 foi uma sexta-feira. A partir dali, cada ano normal avança um dia da semana no calendário, e anos bissextos avançam dois. Então 1º de janeiro de 2025 é: (2025 - 2000) anos depois, com 6 anos bissextos (2000, 2004, 2008, 2012, 2016, 2020) dentro dessa contagem. Avanço total = 25 + 6 = 31 dias. 31 mod 7 = 3. Sexta + 3 = segunda. De fato, 1º de janeiro de 2025 caiu numa segunda-feira. A partir daí, você conta quantos dias tem até o mês desejado e soma ao dia da semana da âncora. É menos elegante que o Zeller, mas leva segundos na cabeça. Se o seu problema é digital, você não precisa fazer nada disso. A função datetime do Python resolve tudo em uma linha: datetime(2025, 9, 19).strftime("%A") retorna "Saturday". Em JavaScript, new Date("2025-09-19").toLocaleDateString("pt-BR", {weekday: "long"}) retorna "sábado". Eu uso Python na maior parte do tempo porque a lib datetime é consistentemente mais simples de lembrar do que a API de datas do JavaScript, que muda de comportamento dependendo da zona horária que você não especificou.
Aqui vai algo que pouca gente menciona e que já me causou prejuízo: fusos horários. Se você está calculando que dia que é sexta-feira para um evento international, a data pode ser sexta em Nova York e quinta em Tóquio ao mesmo tempo. A função date() sem especificar timezone usa a timezone do sistema, e se seu servidor está configurado em UTC, você vai ter um resultado que não corresponde ao horário local do usuário. Sempre converta para a timezone correta antes de extrair o dia da semana. No Python, isso é uma linha com zoneinfo: datetime(2025, 9, 19, tzinfo=zoneinfo.ZoneInfo("America/Sao_Paulo")).weekday() retorna 5, que é sexta-feira — o que significa que 19 de setembro de 2025 cai numa sexta em São Paulo também. O problema mais frequente que eu vejo em produção é gente usando bibliotecas de data sem configuração de locale e esperando que o resultado seja em português. O PHP com date("l", $timestamp) retorna "Friday" em inglês por padrão. O Excel usa a configuração regional da planilha, que varia de máquina pra máquina. Se você está construindo algo que pessoas vão usar, configure explicitamente o locale ou use uma função que aceite idioma como parâmetro. Do contrário, você vai ter usuários reclamando que o sistema mostra o dia errado quando na verdade é só uma questão de idioma.
👉 Clique no botão abaixo para saber mais sobre o assunto!
Outro erro comum é confundir weekday com isoweekday. A maioria das bibliotecas define segunda como 0 ou 1, mas a norma ISO 8601 define segunda como 1 e domingo como 7. Se você está comparando resultados entre sistemas diferentes, verifique qual convenção cada um está usando antes de concluir que há um bug. Já perdi tarde demais corrigindo uma planilha inteira porque o relatório exportava em isoweekday e eu estava lendo como weekday.
Código de exemplo em Python
Se você quer algo pronto para copiar, aqui está uma função simples que recebe uma data e informa o dia da semana em português: from datetime import datetime
from zoneinfo import ZoneInfo
DIA_SEMANA_PT = ["segunda-feira", "terça-feira", "quarta-feira", "quinta-feira", "sexta-feira", "sábado", "domingo"]
def dia_semana(data_str, zona="America/Sao_Paulo"):
dt = datetime.fromisoformat(data_str)
dt = dt.replace(tzinfo=ZoneInfo(zona))
return DIA_SEMANA_PT[dt.weekday()]
print(dia_semana("2025-09-19"))
Isso retorna "sexta-feira". A função assume ISO 8601 no formato AAAA-MM-DD e converte para a zona horária especificada. Se você omitir a zona, ela usa a timezone do sistema, o que pode variar entre ambientes de desenvolvimento e produção. O mesmo problema aparece em outras linguagens. No Go, time.Date(2025, time.September, 19, 0, 0, 0, 0, time.Local).Weekday() depende do time.Local, que pode não ser o que você espera em um container Docker. Em Rust, chrono::NaiveDate::from_ymd(2025, 9, 19).weekday() é determinístico porque não usa timezone, então para datas puras sem horário o resultado é sempre o mesmo, mas você perde a capacidade de lidar com datas históricas que caem em dias diferentes dependendo da timezone.
Para quem prefere não codar, existem sites como timeanddate.com que calculam dia da semana instantaneamente, e a Google search também responde se você digitar "what day is September 19 2025". O problema desses serviços é que eles não são confiáveis para uso programático — se você está construindo uma aplicação que precisa verificar que dia que é sexta-feira automaticamente, não confie em scrape de site. Use uma library de data nativa do seu ambiente. Em resumo, calcular que dia que é uma sexta-feira específica é trivial quando você sabe as ferramentas certas e evita as armadilhas mais óbvias: timezone, locale, e convenção de numeração dos dias da semana. O Zeller é bom para entender o que está acontecendo por baixo, mas na prática uma biblioteca de data bem configurada resolve seu problema em milissegundos sem erro humano.