Shell 解决周不跨月的问题

前提:

计算上周、上月的内容,比如总笔数、交易总金额

在处理需求时,需求方提出了一个周不能跨月的要求,举个例子:

20190527~20190602是一个自然周   

那么要求是在20190603那天计算上周时,只计算20190601~20190602区间的,20190527~20190531这几天并入上一个月的计算

 

思路:

1、shell生成的上周周一、上周周日的时间;

2、截取周一、周日截止月的位置,即排除日;

3、判断周一、周日是否相等,即是否跨月:

  • 相等,则开始日期为周一的日期,结束日期为周日的日期;
  • 不相等,则开始日期为周日的月份拼接 01,结束日期为周日的日期。
last_monday_str=$1
last_sunday_str=$2
#判断周一、周日的年月是否相同,若相同,不做任何处理;若不同,则取周日的年月+01为开始日期,周日为结束日期
start_date=${last_monday_str:0:6}
end_date=${last_sunday_str:0:6}

echo "start_date:"$start_date
echo "end_date:"$end_date

#比较
if [ "$start_date" == "$end_date" ]
then
        start_date=$last_monday_str
        end_date=$last_sunday_str
else
        start_date=$end_date"01"
        end_date=$last_sunday_str
fi

echo $start_date
echo $end_date

 

PS:上周一、上周日生成

#!/usr/bin/env bash

OFDAY="`date "+%u"`"
STEPOFDAY="`expr $OFDAY + 6`"

last_monday="`date -d '-'$STEPOFDAY' day' "+%Y-%m-%d"`"
last_sunday="`date -d '-'$OFDAY' day' "+%Y-%m-%d"`"

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值