zoukankan      html  css  js  c++  java
  • get_date.sh


    #!/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
    }

  • 相关阅读:
    android学习地址
    Android获取屏幕高度、标题高度、状态栏高度详解
    学习地址(杂)
    获取控制台应用程序自己的文件名
    学习地址
    如何分配数据库角色权限
    android 近百个源码项目
    深入理解默认构造函数
    深入理解拷贝构造函数
    读权限和执行权限的差别
  • 原文地址:https://www.cnblogs.com/xuehen/p/5275156.html
Copyright © 2011-2022 走看看