我想要的是在bash脚本中的4周周期
我的问题是:我如何知道本周的周期数
周x星期一:回声一
周x + 1星期一:回声两个
周x + 2星期一:回声三
周x + 3星期一:回声四
再次
周x + 4星期一:回声一个
等等
我所拥有的是时代
(UTC),1970年1月1日星期四
因此
(UTC),星期一,1970年1月5日(我可以将其设置为回应1)
有什么建议吗?转换日期没问题。只是一个普遍的想法是可以的。
答案 0 :(得分:1)
我认为您希望使用GNU date
,
start_date=$(date -d "1970-01-05" '+%s') # Corresponding to 1
end_date=$(date -d "2017-01-02" '+%s') # Current week
日期之间的周数
numberOfWeeks=$(( ( end_date - start_date )/(60*60*24*7) ))
printf "%s\n" "$numberOfWeeks"
2452
现在要确定这对应于哪一周,请执行
printf "The current week %s belongs to week %d" "$(date)" "$(((numberOfWeeks%4) + 1))"
The current week Mon, Jan 02, 2017 4:47:09 PM belongs to week 1
再说几周了。 2017年3月4日星期一,使用上述计算,即
end_date=$(date -d "2017-03-27" '+%s')
printf "The week %s belongs to week %d" "$(date -d "2017-03-27")" "$(((numberOfWeeks%4) + 1))"
The week Mon, Mar 27, 2017 12:00:00 AM belongs to week 1
2017年第3个星期一或3月的另一个例子,
end_date=$(date -d "2017-03-20" '+%s')
printf "The week %s belongs to week %d" "$(date -d "2017-03-20")" "$(((numberOfWeeks%4) + 1))"
The week Mon, Mar 20, 2017 12:00:00 AM belongs to week 4
答案 1 :(得分:0)
您可以格式化日期输出以显示周数:
function printweek {
weeknr=$(date '+%V' -d "+$1 weeks")
echo "$((weeknr%4))"
}
# Test
for week in 0 1 2 3 4 5 6 30 31 32 33; do
echo "Week offset from today ${week} => $(printweek ${week})"
done
当你开始计算每年(第一周再次)时,这将有效。当你想继续依靠1 Januari时,脚本将更加困难。你可以看一下@Inian的解决方案
另一个选项可能是查看上次运行的输出,并将一个%4
添加到上次运行的周数。