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`

发布了14 篇原创文章 · 获赞 1 · 访问量 2万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览