在bash脚本中确定4周周期的周数

时间:2017-01-02 10:59:46

标签: bash date

我想要的是在bash脚本中的4周周期 我的问题是:我如何知道本周的周期数     周x星期一:回声一     周x + 1星期一:回声两个
    周x + 2星期一:回声三     周x + 3星期一:回声四 再次
    周x + 4星期一:回声一个 等等

我所拥有的是时代 (UTC),1970年1月1日星期四
因此
(UTC),星期一,1970年1月5日(我可以将其设置为回应1)

有什么建议吗?转换日期没问题。只是一个普遍的想法是可以的。

2 个答案:

答案 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添加到上次运行的周数。