Неделя месяца - PullRequest
       7

Неделя месяца

5 голосов
/ 25 сентября 2011

Я пытаюсь получить номер недели месяца, и вот что я пытаюсь сделать:

x=`date +"%V"`
echo "x is $x"
y=`date +"%V" -d $(date +"%Y%m01")`
echo "y is $y"
week_of_month=$((x-y))
echo "week_of_month is $week_of_month"

и вот что я получаю:

x is 38
y is 38
week_of_month is 0

Но если мой статус работает правильно, значение у должно быть 35 или около того. Что я делаю не так?

Ответы [ 8 ]

3 голосов
/ 18 июля 2012

Это работало для меня на OS X:

week_today=$(date "+%W")
week_start_of_month=$(date -v1d "+%W")
week_of_month=$[week_today - week_start_of_month + 1]

Предполагается, что понедельник будет первым днем ​​недели. Если вы хотите, чтобы воскресенье рассматривалось как первый день недели, вам придется заменить %W на %U.

Это дает номер недели от 1 до 6. Если вы хотите иметь номер недели с нулевым индексом, просто опустите + 1 в последней строке.

1 голос
/ 20 ноября 2018
echo $((($(date +%-d)-1)/7+1))
1 голос
/ 04 сентября 2017

Это наиболее портативное решение:

#/bin/sh

_DOM=`date +%d`
_WOM=$(((${_DOM}-1)/7+1))
1 голос
/ 20 мая 2012

Вы не можете доверять date +%V, потому что это дает (очевидно бесполезную) неделю года ISO.

Это означает, что вы получите странные результаты, например, 1 января - 52-я неделя года.

Например:

date --date='2012-01-01 12pm UTC' +%V
52
0 голосов
/ 11 сентября 2017

Для Linux попробуйте следующую команду

Week=$(($(date "+%W")-$(date --date="$(date --date="$(($DAY-1)) days ago")" +"%V")+1))

Это вычислит номер текущей недели и вычтет номер недели с начальной датой месяца. Удалите +1 в конце, если вы хотите начать номер недели с «0».

0 голосов
/ 02 марта 2012

Я не человек оболочки, но если вы хотите найти номер недели, который подойдет для алгоритма, подобного этому.

Найдите смещение, дату первого воскресенья, для марта 2012 года это 4. (yourdate + offset) / 7 даст вам неделю месяца.

Вы можете легко сделать это в c #, не знаю о shell.

0 голосов
/ 09 января 2012

в Solaris 5.10

date +%V работает нормально.

см. справочные страницы даты для вашей машины.

0 голосов
/ 25 сентября 2011

В Mac OS X я смог сделать это для желаемого результата.

y=`date -v1d +%V`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...