加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-15 19:13:54 所属栏目:安全 来源:网络整理
导读:我需要创建三个变量,每个变量用于今天日期的Year,Month和Day,减去X天数。对于这个问题,我会选择一个随机的天数:222。 因此,如果: TodayYear=`date +%Y`TodayMonth=`date +%m`TodayDay=`date +%d` 我想要的是在这之前的222天。 222days_before_TodayYe
我需要创建三个变量,每个变量用于今天日期的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")

而且应该这样做=)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读