SHELL脚本获取某天的上一周日期(星期一为第一天)

最近天天写SHELL,写到想吐,没有系统学习SHELL,写的时候出现很多问题,觉得挺吃力的!
 
特别是关于时间的,之前接了一个需求,获取某天的上一周的星期一和最后一天星期日的日期
 
网上找了很久都没找到,唯有用自己的方法写了一个SHELL的算法了,写这么一个东西研究了半天
 
我真的向SHELL吐槽,怎么那么难用。。。
 
#!/bin/bash


#########注意:这里获取的是'某天'的'上一周'时间############
#得到今天是第几周
this_week=$(date +%W)

#得到某天是第几周
before_week=$(date -d $* +%W)

#某天-今天=周差
subweek=$[before_week-$this_week-1]

#利用加减周数获取,获取某周的‘今天’
today=`date -d "$subweek week" +%Y%m%d`

#获取today究竟是一个周的哪一天
whichday=$(date -d $today +%w)

#用(today-whichday)+1,就是某周的第一天,这里是星期一
startday=`date -d "$today -$[${whichday}-1] days" +%Y%m%d`

#某周的最后一天,星期日为最后一天
endday=`date -d "$startday +6 days" +%Y%m%d`

echo $startday 
echo $endday

#get week by year : 2013W32
week=$(date -d $startday +%W)
year=$(date -d $* +%Y)
yearweek=${year}W${week}

上述代码经过测试,有个跨年的BUG,修复版本
 
#取得入参的时间
indate=$*;

if [ ! $indate ]; then
  indate=$(date +%Y%m%d)
fi

#取得统计日期(一般为入参的上周的今天)
statday=`date -d "$indate -1 weeks" +%Y%m%d`

#得到是当周的周几 (0为星期日,1为星期一,...6为星期六)
whichday=$(date -d $statday +%w)

#用(statday-whichday)+1,就是某周的第一天,这里是星期一
if [ $whichday == 0 ]; then
  startday=`date -d "$statday -6 days" +%Y%m%d`
else
  startday=`date -d "$statday -$[${whichday} - 1] days" +%Y%m%d`
fi

#某周的最后一天,星期日为最后一天
endday=`date -d "$startday +6 days" +%Y%m%d`

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值