Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103655401
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-18 23:25:42

作者:RUIFOX   
#!/bin/sh

####作者:RUIFOX
####功能:取得某日期的任意天前或后的日期

####参数1为?获得帮助

if [ "$1" = "?" ]
then
echo "功能:取得某日期的任意天前或后的日期
Usage:date_g [-b|-a] [n(days)] [Now(yyyymmdd)]
             -b 表示往前的日期
             -a 表示往后的日期,缺省为-a 1,即往后一天
              n 表示间隔的天数,缺省为1
            Now 表示基点日期,缺省为当前日期
如:date_g -a 365 20050210,结果为20060210"
        exit
fi

####参数2表示间隔天数,缺省为1天
Pre=1
if [ "$2" != "" ]
then
        Pre=$2
fi

####参数3表示基点日期,缺省为当前系统日期
####如果要输入特定的基点日期,参数2则不能省略
if [ "$3" != "" ]
then
        Len=`expr length "$3"`
        if [ $Len != 8 ]
        then
                echo "非法基点日期[$Len]!!"
                exit
        fi
        year=`echo $3|awk '{print substr($1,1,4)}'`
        month=`echo $3|awk '{print substr($1,5,2)}'`
        day=`echo $3|awk '{print substr($1,7,2)}'`
        DateP=$3
else
        month=`date +%m`
        day=`date +%d`
        year=`date +%Y`
        DateP=`date +'%Y%m%d'`
fi

####参数1表示向前或向后计数
if [ "$1" = "-a" ]
then
        day=`expr $day + $Pre`
        Ss="后"
else
        day=`expr $day - $Pre`
        Ss="前"
fi

####函数mon_max_day获得每个月的最大天数
####参数一:月数(1-12)
####输出:显示最大天数
mon_max_day()
{
day=0
if [ $1 -gt 0 -a $1 -lt 13 ]
then
case $1 in
            1|01|3|03|5|05|7|07|8|08|10|12) day=31;;
            4|04|6|06|9|09|11) day=30;;
            2|02)
                if [ `expr $year % 4` -eq 0 ]; then
                        if [ `expr $year % 400` -eq 0 ]; then
                                day=29
                        elif [ `expr $year % 100` -eq 0 ]; then
                                day=28
                        else
                                day=29
                        fi
                else
                        day=28
                fi;;
esac
fi
printf $day
}

####主程序开始
Max=`mon_max_day $month`

####针对向前的情况
while [ $day -le 0 ]
do
        month=`expr $month - 1`
        if [ $month -eq 0 ]
        then
            month=12
            year=`expr $year - 1`
        fi
        Max=`mon_max_day $month`
        day=`expr $day + $Max`
done

####针对向后的情况
while [ $day -gt $Max ]
do
        day=`expr $day - $Max`
        month=`expr $month + 1`
        if [ $month -eq 13 ]
        then
            month=1
            year=`expr $year + 1`
        fi
        Max=`mon_max_day $month`
done


DateA=`printf "%02d%02d%02d" $year $month $day`
#echo "基点日期为[$DateP],[$Pre]天$Ss的日期为[$DateA]"
echo "$DateA"
阅读(684) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~