某日分析师提了个需求,求三个时间段的逻辑指标,昨天的好求,周累计——本周一至昨天的累计指标,如果今天是周一,则求出上周一整周的累计指标,月累计——本月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`