Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Quando trabalhamos com datas em aplicações web, a busca pela próxima ocorrência de um dia específico da semana parece simples, mas na prática, ela pode gerar dores de cabeça se não considerarmos alguns detalhes importantes.
Muitos desenvolvedores, ao precisar agendar tarefas ou exibir datas futuras, recorrem a métodos como moment().day() ou moment().isoWeekday(), tentando calcular a próxima segunda ou quinta-feira. A questão é que esses métodos, se utilizados de forma direta, podem não considerar corretamente o ciclo semanal, levando a resultados que parecem corretos, mas podem ocasionar bugs sutis, especialmente ao lidar com diferentes fusos horários ou ao tentar gerar uma rotina de agendamento recorrente.
O erro comum está em assumir que, se hoje é antes do dia desejado, basta pegar a data desta semana. caso contrário, avançar uma semana. Porém, essa lógica não funciona bem para cenários onde o cálculo deve ser mais preciso ou para listas de dias múltiplos. Além disso, muitos esquecem que, ao usar moment().day() ou moment().isoWeekday(), o valor retornado varia conforme o método, e a compreensão dessas diferenças é essencial.
Por exemplo, moment().day() considera o domingo como 0, enquanto isoWeekday() considera a segunda-feira como 1. Assim, a escolha do método influencia diretamente o cálculo.
Para evitar esses erros, recomendo uma estratégia que leva em conta o ciclo semanal de forma explícita, usando isoWeekday(), que considera a semana começando na segunda-feira e facilita o cálculo. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar.
Primeiro, definimos o(s) dia(s) de interesse como números inteiros, por exemplo, 1 para segunda e 4 para quinta: Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar.
const diasDesejados = [1, 4]. // segunda e quinta
Depois, criamos uma função que verifica se o dia atual ainda não passou do dia desejado nesta semana, ou seja, se podemos pegar a mesma semana, ou se devemos avançar para a próxima: Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco.
function obterProximaData(diaAlvo) {
const hoje = moment().isoWeekday(). if (hoje <= diaAlvo) {
return moment().isoWeekday(diaAlvo). } else {
return moment().add(1, 'weeks').isoWeekday(diaAlvo). }
} O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco.
Para lidar com uma lista de dias, podemos usar um método que verifica todos eles, encontra o próximo em ordem, e retorna a data correspondente: Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco.
function encontrarProximoDia(dias) {
const hoje = moment().isoWeekday(). const datasPossiveis = dias
.map(dia => {
if (hoje <= dia) {
return moment().isoWeekday(dia). } else {
return moment().add(1, 'weeks').isoWeekday(dia). }
})
.sort((a, b) => a.diff(b)). return datasPossiveis[0]. } Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta.
Assim, garantimos que, independentemente do dia atual, a busca será sempre precisa e consistente. A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar.
Esse método é bastante direto e fácil de adaptar, mas precisa de atenção com o fuso horário se sua aplicação manipula datas de diferentes regiões. Além disso, ao usar moment(), você trabalha com uma biblioteca pesada e, em ambientes modernos, talvez prefira alternativas como date-fns ou luxon, que oferecem uma API mais leve e moderna. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. A decisão fica mais saudável quando o time consegue medir o impacto depois. A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. A decisão fica mais saudável quando o time consegue medir o impacto depois.
Outro ponto importante é a ordenação das listas de dias, que deve estar consistente com a lógica de sua aplicação. Caso precise de uma rotina mais avançada, por exemplo, que busque o próximo dia útil considerando feriados, aí o cálculo deve incorporar uma lista de exceções. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. Sem esse critério, a solução pode parecer simples no começo e cara no suporte.
isoWeekday() ao invés de day() para cálculos semanais, pois ela considera a semana começando na segunda-feira.A busca pela próxima segunda ou quinta não precisa ser uma fonte de bugs ou resultados inconsistentes. Com uma lógica bem planejada, ela se torna uma rotina confiável e fácil de manter. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco.
Você já enfrentou problemas com cálculos de datas semelhantes? Como lidou com eles na sua rotina? Esse conteto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta.
Carregando comentários...