Shell脚本从今天起查找12个工作日(忽略假期)的日期

时间:2013-05-21 11:03:46

标签: linux bash

我在尝试编写一个bash脚本时遇到一些麻烦,该脚本会比当天晚12个工作日找到日期(忽略假期,因为这会使事情变得相当复杂)。在这种情况下,工作日是星期五。

我甚至不确定从哪里开始!任何起始指针都会很棒:)

3 个答案:

答案 0 :(得分:1)

添加16天(12个工作日= 5 + 5 + 2,所以一般天数为7 + 7 + 2)。对于周四和周五,您必须再增加两天才能跳过周末。

 #! /bin/bash

increment=16
day=$(date +%w)
[[ $day == [45] ]] && (( increment += 2 ))
date -d "+$increment days"

答案 1 :(得分:1)

我认为工作日你的意思是星期一到星期五的一天(即使星期六也可能正式成为工作日)。

将来有时十二个工作日是在三个周末之后,有时是在两个周末之后。因此,我们必须确定我们是在星期四/星期五还是在星期一/星期二/星期三或星期六/星期日。事实证明,星期日与周一/周二/周三的情况相同,所以我们最终使用了这个:

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"

答案 2 :(得分:0)

使用-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