Obtenha o número da semana anterior no bash

Obtenha o número da semana anterior no bash

Preciso do número da semana anterior do mês.

Na 2ª semana de março, a semana anterior seria 1. Na 1ª semana de abril, a semana anterior seria 5.

Minha semana começa na segunda-feira.

WEEK=$(( 1 + $(date +%V) - $(date -d "$(date -d "-$(($(date +%d)-1)) days")" +%V) ))

Como posso subtrair um disso para obter a semana anterior (se a semana for igual a 1, tenho uma exceção, então não preciso me importar com isso).

Também seria bom se fevereiro, com apenas 4 semanas, fosse reconhecido automaticamente.

Responder1

Se não me engano, sua expressão (um pouco reorganizada aqui), encontra o número da semana correspondente ao primeiro dia do mês atual, o número da semana correspondente a hoje e calcula a diferença como semana do mês?

first=$(date -d "-$(($(date +%d)-1)) days")
weekofmon=$(( 1 + $(date +%V) - $(date -d "$first" +%V) ))

Se estiver certo, e você deseja a semana do mês da semana passada, não deveria ser suficiente apenas substituir "hoje" por "7 dias atrás" (em todos os lugares) para obter o mês da semana correspondente a Aquela data?

now="7 days ago"
first=$(date -d "$now - $(($(date +%d -d "$now" )-1)) days")
weekofmon=$(( 1 + 10#$(date +%V -d "$now") - 10#$(date -d "$first" +%V) ))

Depende da datecapacidade de analisar expressões como "7 dias atrás - 3 dias". date +%Vimprime números de semanas <10 com um zero à esquerda, o que faria com que fossem interpretados como números octais, quebrando 08e 09. Adicione o 10#para forçar o bash a obter os números em decimais.

Uma maneira um pouco mais curta de obter o primeiro dia do mesmo mês:

first=$(date -d "$now" +"%Y-%m-01") 

(formato diferente, mas datedeve ser capaz de interpretá-lo.)

informação relacionada