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周 但是,有一个抓住!如果常规日数是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") 而且应该这样做=) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |