如何确定一个月的周数

在Linux CLI上,有没有办法得到当月的星期几? 也许还有另一种方法来获得这个简单的(如date )命令? 假设第一天到第七天是第一周,第八天到第十四天是第二周,依此类推。

    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;}" 

    如果您在任务中接受外部工具,请尝试使用dateutils 。 这是2012年4月27日是2012年4月的第四个星期五,这与您的星期定义恰好相符。 要获得该号码使用:

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

    %c (count)是月份内发生的格式说明符。 或者更酷的尝试

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

    简化Victor Sanchez的解决scheme:

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

    如果你想要星期天开始的话,用%Ureplace%V。

    顺便说一句:不得不使用expr而不是$((…)),因为后者似乎不喜欢带前导零的数字。