Назад | Перейти на главную страницу

Как определить номер недели в месяце

В Linux CLI есть способ узнать номер недели месяца? Может быть, есть другой способ добиться этого с помощью одного простого (например, date) команда? Допустим, дни с 1 по 7 - первая неделя, дни с 8 по 14 - вторая неделя и так далее.

В date команда не может сделать это внутренне, поэтому вам понадобится внешняя арифметика.

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

Изменить: добавлен знак минус между% и d

Вы можете использовать это:

Понедельник Первый день недели

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

Воскресенье Первый день недели

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

Попробуй это:

d=`date +%d` ; m=`date +%m` ; y=`date +%Y` ; cal $m $y | sed -n "3,$ p" | sed -n "/$d/{=;q;}"

упрощая решение Виктора Санчеса:

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

замените% V на% U, если вы хотите, чтобы недели начинались в воскресенье.

btw: пришлось использовать expr вместо $ ((...)), потому что последнее, похоже, не любит числа с ведущими нулями.

Если вы принимаете внешние инструменты в своем поиске, попробуйте dateutils. У него есть понятие дат в пределах месяца, то есть 27 апреля 2012 года - это 4-я пятница апреля 2012 года, что как раз совпадает с вашим определением недели. Чтобы получить этот номер, используйте:

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

%c (число) - спецификатор формата для вхождения в течение месяца. Или, чтобы быть еще круче, попробуйте

dconv today -f '%cth %a in %b %Y'
=>
  1st Wed in Sep 2012