每个星期的一周

时间:2011-09-24 22:56:28

标签: shell date

我正在尝试获取本月的周数,这就是我想要做的事情:

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

但如果我的声明工作正常,y的值应该是35左右。我做错了什么?

8 个答案:

答案 0 :(得分:3)

这在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 :(得分:1)

你不能相信date +%V,因为它给了(明显没用的)ISO周的一周。

这意味着你得到奇数球,就像1月1日是一年中的第52周。

<强> E.g:

date --date='2012-01-01 12pm UTC' +%V
52

答案 2 :(得分:1)

这似乎是最便携的解决方案:

#/bin/sh

_DOM=`date +%d`
_WOM=$(((${_DOM}-1)/7+1))

答案 3 :(得分:1)

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

答案 4 :(得分:0)

在Mac OS X上,我能够达到预期效果。

y=`date -v1d +%V`

答案 5 :(得分:0)

Solaris 5.10上的

date +%V效果很好。

请参阅您机器的日期man pages

答案 6 :(得分:0)

我不是一个贝壳人,但是如果你想找到周数,那么这样的算法就可以了。

查找偏移量,即第一个星期日的日期,2012年3月为4。 (你的日期+偏移)/ 7会给你一周的一周。

您可以在c#中轻松完成此操作,不了解shell。

答案 7 :(得分:-1)

对于Linux,请尝试以下命令

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

这将计算当前周数并减去该月开始日期的周数。 如果要从“0”开始月份的周数,请在结尾处删除+1。