linux命令求昨天,今天,明天,周一,上周一,下周一,月初

某日分析师提了个需求,求三个时间段的逻辑指标,昨天的好求,周累计——本周一至昨天的累计指标,如果今天是周一,则求出上周一整周的累计指标,月累计——本月1号至昨天的累计指标,同理如果今天是1号,则求出上月一整月的累计指标。
真可谓开发都是被需求逼死的,不多说,经过研究代码如下:

if [ $# -eq 1 ]; then
     n_date=`date -d "$1" +%Y-%m-%d`
else
     n_date=`date -d " -1 days" +%Y-%m-%d`
fi
echo "n_date ${n_date}"
     #t_date=`date -d "+1 days ${n_date}" +%Y-%m-%d` tomorrow
     t_date=`date -d "${n_date} tomorrow" +%Y-%m-%d`
     t_d=`date -d "${n_date} next-day" +%d`
echo "t_date ${t_date}"    
echo "t_d ${t_d}" 
     n_week=`date -d "$t_date" +"%w"`
echo "n_week ${n_week}"
if [ ${n_week} -eq 1 ]; then
	   n_week_start=`date -d "$t_date 7 days ago" +%Y-%m-%d`
else 
     n_week_start=`date -d "$t_date  $((n_week -1)) days ago" +%Y-%m-%d`
fi
echo "n_week_start ${n_week_start}"
if [ ${t_d} -eq 01 ]; then  
     n_month_start=`date -d "$t_date last-month" +%Y-%m-%d`
else
     n_month_start=`date -d "$t_date  $((t_d -1)) days ago" +%Y-%m-%d`
     #n_month_start=`date -d "-2 days $t_date" +%Y-%m-%d`
fi
echo "n_month_start ${n_month_start}"

挨个剖析,如果有给定日期就用给定日期,获取参数日期(主要是测试用):

n_date=`date -d "$1" +%Y-%m-%d`      //获取第一个参数作为日期

没有就先求出昨天的日期,4种写法,每一种都可以用:

n_date=`date -d " -1 days" +%Y-%m-%d`   //昨天的日期,注意,+号前的空格必须有,不然会报错
n_date=`date -d " 1 days ago" +%Y-%m-%d`    //有的人会”%Y-%m-%d“这样写日期格式,但是我不建议这样写,因为在换算日期时容易报错
n_date=`date -d "last-day" +%Y-%m-%d`
n_date=`date -d " yesterday" +%Y-%m-%d`

今天的日期:

j_date=`date  +%Y-%m-%d`    //-d这个参数在日期变换时使用,求今天的时候可以不用写

明天的日期,也是两种用法:

t_date=`date -d "${n_date} tomorrow" +%Y-%m-%d`   //明天日期
t_date=`date -d "+1 days ${n_date}" +%Y-%m-%d`   //这里使用+1 days或-1 days的用法时要放在参数日期前面,不然会报错
t_d=`date -d "${n_date} next-day" +%d`   //只有日的明天日期

周一的日期:

n_week_start=`date -d "$t_date  $((n_week -1)) days ago" +%Y-%m-%d`

通过本周一推出上周一的日期:

n_week_start=`date -d "$n_week_start 1 weeks ago" +%Y-%m-%d`

下周一的日期:

date -d ’next monday’

本月初的日期:

n_month_start=`date -d "$t_date  $((t_d -1)) days ago" +%Y-%m-%d`

猜你喜欢

转载自blog.csdn.net/weixin_42474635/article/details/89472978