我想要的是bash脚本中的4周循环
我的问题是:我如何知道这周的周期数字。
week x monday : echo one week x+1 monday : echo two week x+2 monday : echo three week x+3 monday : echo four再一次
week x+4 monday : echo one and so on我所拥有的是时代
(协调世界时),1970年1月1日星期四
因此
(协调世界时),1970年1月5日(星期一)(我可以将其设置为回应1)
有什么建议吗?转换日期是没有问题的。只需要一个大概的想法就可以了。
发布于 2017-01-02 19:32:38
我想你在期待和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月的第三个星期一,
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发布于 2017-01-02 19:35:32
您可以格式化日期输出以显示周数字:
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月1日计数时,脚本将会更加困难。你可以看看@ can的解决方案。
另一种选择可能是查看最后一次运行的输出,并在最后一次运行的周编号上添加一个%4。
https://stackoverflow.com/questions/41425554
复制相似问题