- 论坛徽章:
- 0
|
请助:怎样得到日期差值(信合的朋友请指教)
get_next_date()
{
Y=`expr substr $1 1 4`
M=`expr substr $1 5 2`
D=`expr substr $1 7 2`
YY=`expr $Y + 1`
MM=`expr $M + 1`
DD=`expr $D + 1`
MM=`printf "%02d" $MM`
DD=`printf "%02d" $DD`
r1=`expr $Y \% 4`
r2=`expr $Y \% 100`
r3=`expr $Y \% 400`
next_date=$Y$M$DD
if [ $D -eq 30 ];then
case $M in
04|06|09|11) next_date=$Y$MM"01";;
esac
fi
if [ $D -eq 31 ];then
next_date=$Y$MM"01"
case $M in
12) next_date=$YY"0101";;
esac
fi
if [ $M -eq 02 ];then
if [ r1 -eq 0 -a r2 -ne 0 -o r3 -eq 0 ];then
if [ $D -eq 29 ];then
next_date=$Y$MM"01"
fi
else
if [ $D -eq 28 ];then
next_date=$Y$MM"01"
fi
fi
fi
echo $next_date
}
get_mon_between_days()
{
begin_date=$1
end_date=$2
i=0
while [ $begin_date -le $end_date ];do
i=`expr $i + 1`
begin_date=`get_next_date $begin_date`
done
echo $i
}
get_mon_between_days 20020101 20030101
我试了效率有点慢,不知各位有无更好的方法(指的是shell,我用C写了一个,当然快了) |
|