bash – 今天的日期,减去X天的shell脚本

我需要创建三个变量,每个变量用于今天日期的Year,Month和Day,减去X天数。对于这个问题,我会选择一个随机的天数:222。

因此,如果:

TodayYear=`date +%Y`
TodayMonth=`date +%m`
TodayDay=`date +%d`

我想要的是在这之前的222天。

222days_before_TodayYear=???
222days_before_TodayMonth=???
222days_before_TodayDay=???

编辑:需要222个工作日,而不是222个常规日。

对于GNU日期:
date_222days_before_TodayYear=$(date --date="222 days ago" +"%Y")
date_222days_before_TodayMonth=$(date --date="222 days ago" +"%m")
date_222days_before_TodayDay=$(date --date="222 days ago" +"%d")

对于BSD date ::

如果您使用的是OS X或FreeBSD,请使用以下代码,因为BSD日期与GNU日期不同:

date_222days_before_TodayYear=$(date -j -v-222d +"%Y")
date_222days_before_TodayMonth=$(date -j -v-222d +"%m")
date_222days_before_TodayDay=$(date -j -v-222d +"%d")

资料来源:BSD date manual page

注意:

在bash和许多其他语言中,您无法使用数字字符启动变量名称,因此我为您添加了date_。

第二次更新:新要求 – 使用222个工作日而不是222个常规日:

(假设:不考虑法定假日,因为这远远超出了我可以帮助你的shell脚本的范围:)

考虑222个工作日:

>每周5个工作日,即楼(222/5)== 44周
> 44周*每周7天== 308天
>额外的日子剩余:222%5 == 2
>因此222个工作日== 310常规日

但是,有一个抓住!如果常规日数是308或7的倍数,那么我们会很好,因为从工作日起7天前的任何倍数仍然是一个工作日。所以我们需要考虑今天是星期一还是周二:

>如果今天是星期一,星期六我们将在星期六到达
>如果今天是星期二,我们星期天到星期天去

所以,如果今天是星期一或星期二,我们需要额外的2天的抵消;所以让我们先来看看,然后再继续:

#!/bin/bash

# Use 310 days as offset instead of 222
offset=310
# Find locale's abbreviated weekday name (e.g.,Sun)
today=$(date -j +"%a")
# Check for Mon/Tue
if [[ "$today" == "Mon" ]] || [[ "$today" == "Tue" ]]; then
     offset=$((offset+2))
fi

date_222_working_days_before_TodayYear=$(date -j -v-${offset}d +"%Y")
date_222_working_days_before_TodayMonth=$(date -j -v-${offset}d +"%m")
date_222_working_days_before_TodayDay=$(date -j -v-${offset}d +"%d")

而且应该这样做=)

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...