因为hp-unix 服务器上,date 命令还不够完善,没有 -d 选项,在做取多少时间之前的时间显得特不灵活。
现有需求需要取的5个月之前的时间,实现代码如下:
#!/bin/sh
curY=`date +%Y`
curM=`date +%m`
i=5 #5个月
countdays=0 #5个月总天数
while [ $i -gt 0 ] #循环5次
do
temp=`echo "$curM-$i"|bc`
tempM=$temp
tempY=$curY
if [ $temp -lt 0 ] || [ $temp -eq 0 ];then #如果月份少于0或等于0则加12,年份减1
tempM=`echo "$temp+12"|bc`
tempY=`echo "$curY-1"|bc`
fi
monday=`cal $tempM $tempY|xargs|awk '{print $NF}'` #得到一个月的天数(关键语句,*_^)
countdays=`echo $countdays+$monday|bc` #累计5个月的天数
i=`echo "$i-1"|bc`
done
echo "总天数:"$countdays
seconds=86400*$countdays
mydate=`perl -e "print sprintf '%04d%02d%02d%02d%02d%02d',(localtime(time()-$seconds))[5]+1900,(localtime(time()-$seconds))[4]+1,(localtime(time()-$seconds))[3],(localtime(time()-$seconds))[2],(localtime(time()-$seconds))[1],(localtime(time()-$seconds))[0]"`
echo $mydate