#!/usr/bin
####################################################################
#日期函数处理
#获取某个月份的天数 getMonthMaxDay yyyy-mm-dd 返回格式:yyyy-mm-dd
#获取后一天日期 getNextDate yyyy-mm-dd 返回格式:yyyy-mm-dd
#获取后面N天的日期 getNextNDate yyyy-mm-dd N 返回格式:yyyy-mm-dd
#获取前一天日期 getLastDate yyyy-mm-dd 返回格式:yyyy-mm-dd
#获取当前数据日期前N天的日期 getLastNDate yyyy-mm-dd N 返回格式:yyyy-mm-dd
#获取当日对应的月的月末日期 getEndMonDay yyyy-mm-dd 返回格式:yyyy-mm-dd
#获取下月的月末日期 getNextMonEndDay yyyy-mm-dd 返回格式:yyyy-mm-dd
#获取下月同期日期 getNextMonthDay yyyy-mm-dd 返回格式:yyyy-mm-dd
#获取上月同期日期 getLastMonthDay yyyy-mm-dd 返回格式:yyyy-mm-dd
#获取上月同期数据日期 getLMDataDay yyyy-mm-dd 返回格式:yyyy-mm-dd 注:若本月日期是月末则上月同期始终为月末日期,不是月末则本月的日期位比
上月月末日期大于等于则取上月倒数第二天
#获取去年同期日期 getLastYearDay yyyy-mm-dd 返回格式:yyyy-mm-dd
####################################################################

###获取某个月份的天数
getMonthMaxDay(){
virdate=`echo ${1}`;
virM=`echo ${1}`;
viryear=`echo ${virdate}|awk -F "-" '{print $1}'` ;
virmonth=`echo ${virdate}|awk -F "-" '{print $2}'` ;
virday=`echo ${virdate}|awk -F "-" '{print $3}'` ;
#参数为空
if [ ! -n "$virmonth" ];
then
virmonth=`echo ${virM}`;
fi

if [ ! -n "$virmonth" ];
then
return 0
fi

if [ $virmonth -gt 0 -a $virmonth -lt 13 ]
then
case $virmonth in 1|01|3|03|5|05|7|07|8|08|10|12 )
maxday=31 ;;
4|04|6|06|9|09|11 )
maxday=30 ;;
2|02 )
if [ `expr $viryear % 4` -eq 0 ]
then
if [ `expr $viryear % 400` -eq 0 ]
then
maxday=29
elif [ `expr $viryear % 100` -eq 0 ]
then
maxday=28
else
maxday=29
fi
else
maxday=28
fi ;;
esac
fi
echo $maxday
}

####获取后一天日期
getNextDate() {
virdate=`echo ${1}`;
#划分年月日
viryear=`echo ${virdate}|awk -F "-" '{print $1}'` ;
virmonth=`echo ${virdate}|awk -F "-" '{print $2}'` ;
virday=`echo ${virdate}|awk -F "-" '{print $3}'` ;

#获取某月最后一天
virmonth_endday=`echo $(getMonthMaxDay $virdate )` ;

virday=` expr $virday + 1 `;
##当日+1后日期大于月末则月份+1,同时当日设置为1号;月份+1大于12后则年份+1,同时月份设置为1月
if [ ${virday} -gt ${virmonth_endday} ]
then
virday=` expr 0 + 1 `;
virmonth=` expr $virmonth + 1 `;
if [ $virmonth -gt 12 ]
then
virmonth=` expr 0 + 1 `;
viryear=` expr ${viryear} + 1 `;
fi
else
virmonth=` expr $virmonth + 0 `;
fi

##月份或者日期小于10将月份或者日期的字符前面加一个0,补足两位格式
if [ $virmonth -lt 10 ]
then
virmonth=`echo 0${virmonth}`;
fi

if [ $virday -lt 10 ]
then
virday=`echo 0${virday}`;
fi

virdate=`echo ${viryear}-${virmonth}-${virday}` ;
echo $virdate
}
##获取后面N天的日期
getNextNDate() {
virdate=`echo ${1}`;
LastN=`echo ${2}`;
#划分年月日
num=`echo 1`;
while [ ${num} -le ${LastN} ]
do
virdate=`echo $(getNextDate $virdate )` ;
num=` expr $num + 1 `;
done
echo ${virdate}
}

####获取前一天日期
getLastDate() {
virdate=`echo ${1}`;
#划分年月日
viryear=`echo ${virdate}|awk -F "-" '{print $1}'` ;
virmonth=`echo ${virdate}|awk -F "-" '{print $2}'` ;
virday=`echo ${virdate}|awk -F "-" '{print $3}'` ;

#获取某月最后一天
virmonth_endday=`echo $(getMonthMaxDay $virdate )` ;

virday=` expr $virday - 1 `;
##当日-1后日期小于等于0,同时当日设置上月月末,同时月份-1
if [ ${virday} -le 0 ]
then
virmonth=` expr $virmonth - 1 `;
if [ $virmonth -le 0 ]
then
viryear=` expr ${viryear} - 1 `;
virmonth=`echo 12`;
fi
##月份或者日期小于10将月份或者日期的字符前面加一个0,补足两位格式
if [ $virmonth -lt 10 ]
then
virmonth=`echo 0${virmonth}`;
fi
virday=`echo $(getMonthMaxDay ${viryear}-${virmonth}-01 )` ;
fi

if [ $virday -lt 10 ]
then
virday=`echo 0${virday}`;
fi

virdate=`echo ${viryear}-${virmonth}-${virday}` ;
echo $virdate
}
#获取当前数据日期前N天的日期
getLastNDate() {
virdate=`echo ${1}`;
LastN=`echo ${2}`;
#划分年月日
num=`echo 1`;
while [ ${num} -le ${LastN} ]
do
virdate=`echo $(getLastDate $virdate )` ;
num=` expr $num + 1 `;
done
echo ${virdate}
}
###获取当日对应的月的月末日期
getEndMonDay() {
virdate=`echo ${1}`;
viryear=`echo ${virdate}|awk -F "-" '{print $1}'` ;
virmonth=`echo ${virdate}|awk -F "-" '{print $2}'` ;
virday=`echo ${virdate}|awk -F "-" '{print $3}'` ;
maxday=`echo $(getMonthMaxDay $virdate )` ;
virdate=`echo ${viryear}-${virmonth}-${maxday}` ;
echo $virdate
}
###获取下月的月末日期
getNextMonEndDay() {
virdate=`echo ${1}`;
virdate=`echo $(getNextMonthDay $virdate )` ;
virdate=`echo $(getEndMonDay $virdate )` ;
echo $virdate
}

####获取下月同期日期
getNextMonthDay() {
virdate=`echo ${1}`;
viryear=`echo ${virdate}|awk -F "-" '{print $1}'` ;
virmonth=`echo ${virdate}|awk -F "-" '{print $2}'` ;
virday=`echo ${virdate}|awk -F "-" '{print $3}'` ;

vir_cur_Endday=`echo $(getMonthMaxDay ${virdate} )` ;
vir_cur_day=` expr $virday + 0 `;

##月份+1
virmonth=` expr $virmonth + 1 `;
#----如果月份相加大于等于13则将月份置成1月
if [ $virmonth -gt 12 ]
then
virmonth=1;
viryear=` expr ${viryear} + 1 `;
fi

##月份小于10 需要前置补足一个0用两位表示月份
if [ $virmonth -lt 10 ]
then
virmonth=`echo 0${virmonth}`;
else
virmonth=`echo ${virmonth}`;
fi

vir_NextM_Endday=`echo $(getMonthMaxDay ${viryear}-${virmonth}-01 )` ;

virday=` expr $virday + 0 `;

###如果月份+1的后,月末日期小于传入的参数的日期则将同期设置成月末日期
if [ ${virday} -ge ${vir_NextM_Endday} ]
then
virday=`echo ${vir_NextM_Endday}`;
fi
###如果传入数据日期为当月月末日期,则下月同期就为月末日期
if [ ${vir_cur_day} -eq ${vir_cur_Endday} ]
then
virday=`echo ${vir_NextM_Endday}`;
fi

if [ $virday -lt 10 ]
then
virday=`echo 0${virday}`;
fi

virdate=`echo ${viryear}-${virmonth}-${virday}` ;
echo $virdate
}

####获取上月同期日期
getLastMonthDay() {
virdate=`echo ${1}`;
viryear=`echo ${virdate}|awk -F "-" '{print $1}'` ;
virmonth=`echo ${virdate}|awk -F "-" '{print $2}'` ;
virday=`echo ${virdate}|awk -F "-" '{print $3}'` ;

vir_cur_Endday=`echo $(getMonthMaxDay ${virdate} )` ;
vir_cur_day=` expr $virday + 0 `;

##月份+1
virmonth=` expr $virmonth - 1 `;
#----如果月份相加小于等于0则将月份置成12月
if [ $virmonth -le 0 ]
then
virmonth=12;
viryear=` expr ${viryear} - 1 `;
fi

##月份小于10 需要前置补足一个0用两位表示月份
if [ $virmonth -lt 10 ]
then
virmonth=`echo 0${virmonth}`;
else
virmonth=`echo ${virmonth}`;
fi

vir_LastM_Endday=`echo $(getMonthMaxDay ${viryear}-${virmonth}-01 )` ;

virday=` expr $virday + 0 `;

###如果月份-1的后,月末日期小于传入的参数的日期则将同期设置成月末日期
if [ ${virday} -ge ${vir_LastM_Endday} ]
then
virday=`echo ${vir_LastM_Endday}`;
fi

###如果传入数据日期为当月月末日期,则下月同期就为月末日期
if [ ${vir_cur_day} -eq ${vir_cur_Endday} ]
then
virday=`echo ${vir_LastM_Endday}`;
fi

if [ $virday -lt 10 ]
then
virday=`echo 0${virday}`;
fi

virdate=`echo ${viryear}-${virmonth}-${virday}` ;
echo $virdate
}

####获取上月同期数据日期--与前台展现算法一致(若本月日期是月末则上月同期始终为月末日期,不是月末则本月的日期位比上月月末日期大于等于则取上月倒数第二天)
getLMDataDay() {
virdate=`echo ${1}`;
virdate_End=`echo $(getEndMonDay $virdate )` ;
LMdate=`echo $(getLastMonthDay $virdate )` ;
LMdate_End=`echo $(getEndMonDay $LMdate )` ;

virdate_D=`echo $virdate|cut -c 9-10`
virdate_End_D=`echo $virdate_End|cut -c 9-10`
LMdate_D=`echo $LMdate|cut -c 9-10`
LMdate_End_D=`echo $LMdate_End|cut -c 9-10`

if [ ! ${virdate_D} -eq ${virdate_End_D} ]
then
if [ ${virdate_D} -ge ${LMdate_End_D} ]
then
LMdate=`echo $(getLastDate $LMdate )` ;
fi
fi
echo $LMdate
}

####获取去年同期日期(当月为月底则去年同期永远为月底日期)
getLastYearDay() {
virdate=`echo ${1}`;
viryear=`echo ${virdate}|awk -F "-" '{print $1}'` ;
virmonth=`echo ${virdate}|awk -F "-" '{print $2}'` ;
virday=`echo ${virdate}|awk -F "-" '{print $3}'` ;

vir_cur_Endday=`echo $(getMonthMaxDay ${virdate} )` ;
vir_cur_day=` expr $virday + 0 `;

viryear=` expr ${viryear} - 1 `;

vir_LastY_Endday=`echo $(getMonthMaxDay ${viryear}-${virmonth}-01 )` ;

virday=` expr $virday + 0 `;

###如果月份-1的后,月末日期小于传入的参数的日期则将同期设置成月末日期
if [ ${vir_cur_day} -eq ${vir_cur_Endday} ]
then
virday=`echo ${vir_LastY_Endday}`;
fi

if [ $virday -lt 10 ]
then
virday=`echo 0${virday}`;
fi

virdate=`echo ${viryear}-${virmonth}-${virday}` ;
echo $virdate
}

get_date.sh的更多相关文章

  1. 数据库备份并分离日志表(按月)sh 脚本

    #!/bin/sh year=`date +%Y` month=`date +%m` day=`date +%d` hour=`date +%H` dir="/data/dbbackup/f ...

  2. Linux下如何查找.sh后缀的文件

    find / -name *.sh或locate *.shfind 与locate的区别:locate 配合数据库查看文件位置 find 实际搜寻硬盘查询文件名称

  3. sh 测试网段在线主机

    yum install nmap nmap -sP  192.168.21.1/24 查看网段在线主机 grep -vwf file1 file2 文件内容比较 #!/bin/bash # day=` ...

  4. Maven打包生成可运行bat/sh脚本文件

    利用Maven的appassembler-maven-plugin插件,就可以实现自动打包可运行的脚本,还可以跨平台.   <plugin>      <groupId>org ...

  5. 记一个简单的保护if 的sh脚本

    真是坑爹,就下面的sh,竟然也写了很久! if [ `pwd` != '/usr/xx/bin/tomcat' ] then echo "rstall is not allowed in c ...

  6. 主机巡检脚本:OSWatcher.sh

    主机巡检脚本:OSWatcher.sh 2016-09-26更新,目前该脚本只支持Linux操作系统,后续有需求可以继续完善. 注意: 经测试,普通用户执行脚本可以顺利执行前9项检查: 第10项,普通 ...

  7. Oracle巡检脚本:ORAWatcher.sh

    Oracle巡检脚本:ORAWatcher.sh #!/usr/bin/ksh echo "" echo "ORAWatcher Version:1.0.1" ...

  8. 解决:/bin/sh: 1: /home/**/custom_app.sh: Permission denied错误

    出现如下错误,一般是执行权限不够. /bin/sh: : /home/custom_app.sh: Permission denied 解决方法是:cd 到此文件目录,对提示的文件赋予可执行权限或读写 ...

  9. SH Script Grammar

    http://linux.about.com/library/cmd/blcmdl1_sh.htm http://pubs.opengroup.org/onlinepubs/9699919799/ut ...

随机推荐

  1. v-cloak解决Vue双大括号闪烁问题

    相信不少人和我一样,初次查看一个技术的文档的时候,知识吸收的很慢,因为对这个技术的不熟悉导致不清楚各种操作的应用场景,当我意识到这件事之后,我决定换种学习思路,即以实战为主,卡壳就查文档,会对这个技术 ...

  2. 二gradle创建SSM项目——Hello word

    一创建gradle web项目 1.以下是我的项目结构web工程+工具module,mapper用来存放mybatis-plus自动生成类,通过 MpGenerator.class 生成.   项目结 ...

  3. CtfStudying之SSH私钥泄露

    8/23/19 SSH私钥泄露 对于只是给定一个对应ip地址的靶场机器,我们需要对其进行扫描,探测其开放服务.我原来理解的渗透就是找到目标的漏洞,然后利用这些(这种)漏洞,最后拿到机器的最高权限:其实 ...

  4. 基于TMS320C6678、FPGA XC5VLX110T的6U CPCI 8路光纤信号处理卡

    基于TMS320C6678.FPGA XC5VLX110T的6U CPCI 8路光纤信号处理卡 1.板卡概述 本板卡由我公司自主研发,基于CPCI架构,符合CPCI2.0标准,采用两片TI DSP T ...

  5. Nginx优化_压缩处理与内存缓存

    对页面进行压缩处理; 服务器内存缓存. 1.对页面进行压缩处理 [root@proxy ~]# cat /usr/local/nginx/conf/nginx.conf http { ... gzip ...

  6. python的list内存分配算法

    前提:python为了提高效率会为list预先分配一定的内存空间供其使用,避免在每次append等操作都去申请内存,下面简单分析下list的内存分配算法,主要就是两段. 1.当没有元素时,newsiz ...

  7. tpcc-mysql测试mysql5.6 (xfs文件系统)

    操作系统版本:CentOS release 6.5 (Final)  2.6.32-431.el6.x86_64 #1 内存:32G CPU:Intel(R) Xeon(R) CPU E5-2450 ...

  8. 爬虫技术:从sougou网站访问微信公众号的过程

    一:分析过程:fidder + chrome开发者工具 1:输入nba跳转的页面,每页显示10条相关公众号的信息 2:分析网站得到每条标题的详情页链接地址在: 3,请求上图中的url,会返回一段js代 ...

  9. Conservation Vs Non-conservation Forms of conservation Equations

    What does it mean? The reason they are conservative or non-conservative has to do with the splitting ...

  10. Minor GC、Major GC、Full GC 区别

    原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11488036.html Minor GC 清理年轻代 Minor GC指新生代GC,即发生在新生代(包 ...