我正在尝试获取本月的周数,这就是我想要做的事情:
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左右。我做错了什么?
答案 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)
答案 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。