您的位置:首页 > 运维架构 > Shell

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

2013-08-14 15:08 281 查看
最近天天写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`
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: