首页 > 系统相关 >Shell 获取指定日期的前N个季度的起止日期

Shell 获取指定日期的前N个季度的起止日期

时间:2022-12-03 23:35:31浏览次数:40  
标签:Shell rtnSeasons 起止日期 日期 01 2019 2018 date local


date_before_seasons.sh

#!/usr/bin/env bash
:<<describle
desc: 获取指定日期的前N个季度的日期
author: Answer.AI.L
datetime: 2019-09-11 16:17:39
params: report_dt 日期, 格式:yyyy-mm-dd
reasons 返回N个前移的季度
describle
# set -x

# 日期, 默认当前日期, 格式: yyyy-mm-dd
[ $1 ] && date=$1 || date=`date +%Y-%m-%d`
# 返回N个前移的季度
[ $2 ] && rltCnt=$2 || rltCnt=4
# 返回N个季度信息的数组
rtnSeasons=()

:<<comments
获取指定date的前rltCnt个季度信息
@param date
@param rltCnt
comments
function dateBeforSeasons(){
# 注意该字段为全局变量, 每次使用需要清空数组
unset rtnSeasons
local date=$1
local rltCnt=$2
echo "calculate date: "${date}
# 把日期中的-字符全部替换为空格
date=${date//-/}
# 从第4位开始截取date字符串并对其进行转为数字
local dt=`expr ${date:4} + 0`
local year=${date:0:4}
local ruleArr=(101'<='${dt}'&'${dt}'<='301 401'<='${dt}'&'${dt}'<='630 701'<='${dt}'&'${dt}'<='930 1001'<='${dt}'&'${dt}'<='1231)
# 季节数组, 01010331 -> 第一季节
local seasonArr=('01010331' '04010630' '07010930' '10011231')
local nowSeason=0

for (( i=0; i<${#ruleArr[@]}; i++ ))
do
# 判断当前月份所属的季度
if [ $[${ruleArr[i]}] -eq 1 ];then
nowSeason=${i};
break
fi
done

#echo ${date}"属于第"${nowSeason}"季度"
# 取当前季度的上一个季度
let nowSeason--

for (( i=0; i<${rltCnt}; i++ ))
do
# 如果当前季度小于0(0为第一季度), 则年份前推一年
if [ ${nowSeason} -lt 0 ]; then
let year--
let nowSeason+=4
fi
local index=$((nowSeason%4))
local prevmd=${seasonArr[index]:0:4}
local nextmd=${seasonArr[index]:4}
local prev_month=${prevmd:0:2}
local prev_day=${prevmd:2}
local next_month=${nextmd:0:2}
local next_day=${nextmd:2}
rtnSeasons[i]=${year}"-"${prev_month}"-"${prev_day}"~"${year}"-"${next_month}"-"${next_day}
let nowSeason--
done

echo "date: "$1", cnt: "${rltCnt}" -> rtnSeasons: "${rtnSeasons[@]}
}


dateBeforSeasons 2019-09-11 8
echo "rlt: "${rtnSeasons[@]}

:<<test 测试
dateBeforSeasons ${date} ${rltCnt}
echo "rtnSeasons length: "${#rtnSeasons[*]}
for v in ${rtnSeasons[@]}
do
echo ${v}
done

dateBeforSeasons 2019-09-11 8
echo "rlt: "${rtnSeasons[@]}
test
# set +x

获取 2019-09-11的前8个季度的起止日期

dateBeforSeasons 2019-09-11 8

2019-04-01~2019-06-30 2019-01-01~2019-03-31 2018-10-01~2018-12-31 2018-07-01~2018-09-30
2018-04-01~2018-06-30 2018-01-01~2018-03-31 2017-10-01~2017-12-31 2017-07-01~2017-09-30


标签:Shell,rtnSeasons,起止日期,日期,01,2019,2018,date,local
From: https://blog.51cto.com/u_15891990/5908794

相关文章

  • shell编写循环检查脚本
    背景:如下脚本实现当微服务重启后,检查微服务的启动端口正常,可通过轮询的方式来实现所需要用到配置文件config.properties信息如下:onlineService:8001algorthService:......
  • shell读取配置文件中的参数
    shell读取配置文件中的参数配置文件配置文件config.properties如下:user=bkage=25ip=192.168.37.1 一、使用cat+awk语句过滤并赋值变量user=`catconfig.proper......
  • Shell脚本(一)
    Shell:命令行解释器,接收应用程序/用户命令,然后调用操作系统内核。1.入门脚本以#!/bin/bash开头1xqchang@sam-System-Product-Name:~/linux/datas$touchhelloworld.s......
  • jenkins集成shell与gitlab
    jenkins集成shell    故障:                     故障:  开发提交了代码,然后自动发布测试环境持续集成持续交......
  • python | 一个简单的icmp shell实现(不完善)
    python|一个简单的icmpshell实现(不完善)一个是server端,一个是cilent端,其实问题还是很多的,尤其是在真实网络中的时候,这个shell只适用于直连的情况,并且data不能太大(因为ic......
  • shell实现的进度条
    ​​具体脚本如下progressbar.sh​​:#TheMITLicense(MIT)#Copyright(c)2014HaiKieu#Permissionisherebygranted,freeofcharge,toanypersonobtainingacop......
  • wexpect - 一个可以自动化交互式shell输入的库
    linux下有个pexpect的lib,可以实现一些交互式输入,pexpect网上的教程很多,这里就不多说了;但这个库不能用于windows,如果要实现windows下shell自动化交互式操作的话,可以参考p......
  • vue 添加多条数据 添加日期
    效果图添加多条数据,日期是具体到天。   后端数据格式time:[{s_time:'',e_time:''}]<pv-for="(item,index)inform.third_extend":key="index"style=......
  • 日期格式化 YYYY-MM-DD 出现时间偏移量
    在js中,很多时候需要把日期字符串转换为一个Date对象。如果得到的日期字符串有时间还好办,如果没有时间,只有日期的格式,例如 2022-12-01 这样的字符串呢?大部分人可能什......
  • Element ui 日期时间今天,昨天,一个月(转)
    原文:https://blog.csdn.net/weixin_44585369/article/details/1173345951、需求描述项目里每月需要统计当月的一些数据,或者随时需要调取部分时间段的数据,用Elementui的......