我在尝试编写一个比当前日期晚 12 个工作日的 bash 脚本时遇到了一些麻烦(忽略假期,因为这会使事情变得相当复杂)。在这种情况下,工作日是周一至周五。
我什至不确定从哪里开始!任何起始指针都会很棒:)
加上 16 天(12 个工作日 = 5 + 5 + 2,所以一般天数是 7 + 7 + 2)。对于星期四和星期五,您必须再增加两天才能跳过周末。
#! /bin/bash
increment=16
day=$(date +%w)
[[ $day == [45] ]] && (( increment += 2 ))
date -d "+$increment days"
我假设工作日是指从星期一到星期五的一天(即使星期六也可能正式成为工作日)。
有时未来十二个工作日是在三个周末之后,有时在两个周末之后。所以我们必须弄清楚我们是在星期四/星期五还是在星期一/星期二/星期三或星期六/星期日。事实证明,周日与周一/周二/周三的情况相同,所以我们最终使用了这个:
weekday=$(date +%w) # 0 is Sunday, 6 is Saturday
if [ $weekday -lt 4 ] # Sunday/Monday/Tuesday/Wednesday
then
offset=16
elif [ $weekday -lt 6 ] # Thursday/Friday
then
offset=18
else # Saturday
then
offset=17
fi
date -d "today + $offset days"
使用 -v 选项date
可以找到提前日期。将经过 16 天(包括周六和周日的 4 天),除非该天是周四或周五:在这种情况下,将有 6 个周末。
dn=$(date +'%w') # 0 = Sunday, 1 = Monday etc
days_inc=16
if [ $dn -gt 3 ];then
days_inc=18
fi
date -v +${days_inc}d