Obtenha o número da semana anterior em bash

4

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

Na segunda semana de março, a semana anterior seria 1. Na primeira 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 deles para que eu receba a semana anterior (se a semana for igual a 1 eu 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.

    
por MadMax 11.04.2017 / 14:12

1 resposta

3

Se não estou enganado, sua expressão (reorganizada aqui um pouco) localiza 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 isso é certo, e você quer 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-de- semana correspondente a essa 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 de date poder analisar expressões como "7 days ago - 3 days". date +%V imprime números da semana < 10 com um zero à esquerda, o que faria com que eles fossem interpretados como números octal, quebrando 08 e 09 . Adicione o 10# para forçar o bash a obter os números em decimal.

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 date deve ser capaz de interpretá-lo.)

    
por 11.04.2017 / 14:50