Calcular dias úteis no mês não é só subtrair fins de semana
A resposta curta é que a quantidade varia entre 20 e 24 dias úteis na maioria dos meses brasileiros, dependendo de quantos sábados e domingos caem no calendário e, claro, de quantos feriados incidem naquele período. A questão é que feriado é onde a coisa desanda. Todo mundo sabe que sábado e domingo não contam. Poucos lembram que feriado municipal e estadual também entram na conta, e aí as diferenças aparecem. Eu comecei a me preocupar com isso há anos porque precisava calcular prazos contratuais com clientes do Nordeste e do Sul, cada um com feriados diferentes. O erro mais frequente que eu via era alguém usando uma planilha genérica de 22 dias úteis por mês e se perguntando por que o acordo não fechava. Não fechava porque o mês tinha Páscoa e Corpus Christi no meio, mais dois feriados municipais que ninguém havia colocado na lista.
Quantos dias úteis tem o mês e como calcular corretamente
O método básico é simples, mas a execução pede atenção. Você começa com o total de dias do mês. Subtract os sábados e domingos. Depois subtract os feriados que incidem naquele mês. O resultado é o número de dias úteis. O problema é que não existe uma tabela fixa de feriados que funcione para todo o Brasil. Feriados nacionais são Fixos ou móveis, feriados estaduais variam por estado, e feriados municipais podem variar até dentro da mesma região metropolitana. Os feriados nacionais fixos no Brasil são 1º de janeiro, 21 de abril, 1º de maio, 7 de setembro, 12 de outubro, 2 de novembro, 15 de novembro e 25 de dezembro. Os móveis mudam todo ano: Carnival, Easter Friday, Corpus Christi. Isso significa que fevereiro de 2024 tem um número diferente de feriados móveis do que fevereiro de 2025, mesmo sendo ambos meses curtos com 28 ou 29 dias.
Minha solução prática foi criar um script Python que eu uso sempre. Ele recebe como entrada o mês e o ano, busca a tabela de feriados nacionais móveis baseada no cálculo da Páscoa, aplica uma lista configurável de feriados estaduais e municipais, e devolve o número exato de dias úteis. O código que eu mantenho atualmente funciona assim:
👉 Clique no botão abaixo para saber mais sobre o assunto!
import datetime
import holidays
def dias uteis_mes(ano, mes, estados_municipios=None):
br = holidays.BR(years=[ano], subdiv=estados_municipios)
dias_no_mes = calendar.monthrange(ano, mes)[1]
uteis = 0
for dia in range(1, dias_no_mes + 1):
data = datetime.date(ano, mes, dia)
if data.weekday() < 5 and data not in br:
uteis += 1
return uteis
Para usar, basta passar o ano e o mês. Se quiser incluindo feriados estaduais, usa o parâmetro `subdiv` com a sigla do estado, como `BR-SP` para São Paulo ou `BR-RJ` para o Rio. Feriados municipais exigem uma tabela separada, porque o Brasil não padroniza isso nacionalmente. Eu mantenho um arquivo CSV com os principais municípios e seus feriados, atualizado anualmente. O resultado que eu obtenho costuma ser algo em torno de 21 a 23 dias úteis para mesesnormais, caindo para 19 ou menos quando há feriados móveis no meio do período. Março de 2024, por exemplo, teve Carnival em 6 e 7 de março e Friday of Good Friday em 29 de março. Um mês que deveria ter 23 dias úteis acabou com 20. Quem não olhou a tabela de feriados antes de fechar um contrato perdeu três dias de prazo sem perceber.
Outro detalhe que muita gente esquece é que o cálculo de dias úteis para prazos legais segue regras específicas do Código de Processo Civil e da legislação trabalhista. Em alguns casos, o dia do início não conta e o prazo corre a partir do primeiro dia útil subsequente. Em outros, o dia do vencimento precisa ser útil sob pena de prorrogação automática. Se você está calculando prazos contratuais ou processuais, não confie apenas no número brute de dias úteis. Verifique também qual é a regra de contagem que se aplica ao seu caso. Se você quer algo pronto sem escrever código, a biblioteca `holidays` do Python é a mais confiável que eu já testei. Ela cobre feriados federais, estaduais e até alguns municipais com boa atualização. Para quem prefere planilhas, existem templates que usam a função `WORKDAY` do Excel combinada com uma tabela de feriados, mas a manutenção da tabela de feriados manualemente acaba sendo mais trabalho do que vale a pena a longo prazo. Eu recomendo o script mesmo, especialmente se você trabalha com múltiplos estados.
O ponto principal é que não existe um número único para todos os meses. Falar "o mês tem 22 dias úteis" é uma aproximação que funciona para conversas informais, mas que quebra quando você precisa de precisão. O jeito é calcular por mês, por estado, e por município quando for relevante. E manter a lista de feriados atualizada, senão o número que você usou no contrato do ano passado já está errado no ano seguinte.