Ultimo Dia Da Semana - O último dia feliz da semana está terminando. Amanhã já se...
O último dia feliz da semana está terminando. Amanhã já se...

Como determinar o último dia da semana de forma prática

Muita gente trava na hora de calcular o último dia da semana sem complicação. O problema é que cada linguagem e cada framework trata isso de um jeito. Vou explicar do jeito que eu faço no dia a dia, sem rodeio. O primeiro passo é entender o que você considera como "último dia". Na maioria dos sistemas ocidentais, o domingo é o último dia. Em alguns contextos de negócios, é sexta-feira. A ambiguidade já é onde a maioria dos erros começa.

Qual é o último dia da semana que você precisa?

Aqui vai algo que pouca gente menciona: em muitos casos, você não quer a data do último dia, você quer a virada para o próximo período. Isso muda completamente a implementação. Na minha experiência com sistemas de relatório mensal, eu tinha um caso específico onde o horário de início e fim do período precisavam ser calculados dinamicamente. O relatório ia de domingo 00:00:00 até sábado 23:59:59. O problema era que quando eu usava simplesmente somar dias à data atual, o fuso horário causava um desvio de alguns segundos que fazia o registro cair no dia seguinte. A solução foi usar timestamps Unix (epoch) e trabalhar com intervalos de segundos inteiros, sem converter para objeto DateTime intermediário. Isso eliminou o ruído de fuso horário completamente.

👉 Clique no botão abaixo para saber mais sobre o assunto!

Outro detalhe que as pessoas ignoram: a semana ISO 8601 começa na segunda-feira. Se você está lidando com dados que seguem o padrão ISO, o "último dia" técnico é o sábado, não o domingo. Confundir isso já me custou horas de debugging em um projeto de folha de pagamento onde oshorários Extras eram calculados com base na semana comercial. Vamos ao código. Se você estiver usando Python, a biblioteca datetime padrão resolve em duas linhas:

pegue a data atual com datetime.now(), use .weekday() para saber em que dia você está (0 é segunda, 6 é domingo), calcule quantos dias faltam para chegar ao dia 6, e some à data original. Simples. Mas se você precisar lidar com múltiplos fusos horários, use o pytz ou o zoneinfo do Python 3.9+ para evitar bugs silenciosos. Para JavaScript, a abordagem é parecida mas com uma pegadinha: o getDay() retorna 0 para domingo, não para segunda. E o Date() opera no fuso horário local por padrão, o que significa que se você rodar o código num servidor em outro fuso, o resultado será diferente. Use bibliotecas como date-fns ou Moment.js (apesar do fim do suporte, ainda funciona) se precisar de consistência.

Se você está construindo algo em escala, considere calcular esses intervalos no banco de dados ao invés de na aplicação. Funções como DATE_TRUNC e interval arithmetic no PostgreSQL são muito mais confiáveis do que lógica de borda, especialmente quando múltiplos serviços precisam concordar sobre onde uma semana termina e outra começa. O principal problema que vejo é gente que hardcode datas fixas. Nunca faça isso. A semana certa é aquela que você calcula dinamicamente a partir de uma referência, nunca aquela que você escreve na mão.