Como determinar o número da semana do mês

10

No Linux CLI, existe uma maneira de obter o número da semana do mês? Talvez haja outra maneira de obter isso com um simples comando (como date )? Digamos que o dia 1 a 7 seja a primeira semana, o dia 8 a 14 seja a segunda semana e assim por diante.

    
por B14D3 27.04.2012 / 07:21

5 respostas

21

O comando date não pode fazer isso internamente, então você precisa de alguma aritmética externa.

echo $((($(date +%-d)-1)/7+1))

Editar: adicionado um sinal de menos entre o% e o d

    
por 27.04.2012 / 07:38
2

Você pode usar isto:

Segunda-feira, primeiro dia da semana

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

Data de semana do Sunday Firs

WEEKNUMBER=$(( 1 + $(date +%U) - $(date -d "$(date -d "-$(($(date +%d)-1)) days")" +%U) ))
    
por 28.12.2012 / 14:17
1

Tente isto:

d='date +%d' ; m='date +%m' ; y='date +%Y' ; cal $m $y | sed -n "3,$ p" | sed -n "/$d/{=;q;}"
    
por 27.04.2012 / 07:32
0

Se você aceitar ferramentas externas em sua missão, tente dateutils . Ele tem a noção de datas de ocorrência dentro de um mês, ou seja, 27 de abril de 2012 é a quarta sexta-feira em abril de 2012, que coincide apenas com a sua definição de semana. Para obter esse número, use:

dconv 2012-04-27 -f %c
=>
  04

%c (count) é o especificador de formato da ocorrência dentro do mês. Ou para ser ainda mais legal tente

dconv today -f '%cth %a in %b %Y'
=>
  1st Wed in Sep 2012
    
por 05.09.2012 / 16:04
0

simplificando a solução de Victor Sanchez:

expr 1 + $(date +%V) - $(date +%V -d $(date +%Y-%m-01))

substitua% V por% U se você quiser semanas a partir de domingo.

btw: teve que usar expr ao invés de $ ((...)) porque o posterior não parece gostar de números com zeros à esquerda.

    
por 04.07.2017 / 17:47

Tags