获取当前日期的前一天或几天

来源:互联网 发布:电商产品数据分析 编辑:程序博客网 时间:2024/05/16 12:14

封装脚本 last_day.sh

#!bin/sh
# ydate: A Bourne shell script that
# prints yestarday's date
# Output Form: Month Day Year
# From Focus on Unix: http://unix.about.com
# Author:chenhy

# Set the current month day and year.
month=`date +%m`
day=`date +%d`
year=`date +%Y`
sub_day(){
# Add 0 to month. This is a
# trick to make month an unpadded integer.
month=`expr $month + 0`

# Subtract one from the current day.
day=`expr $day - 1`

# If the day is 0 then determine the last
# day of the previous month.
if [ $day -eq 0 ]; then

# Find the preivous month.
month=`expr $month - 1`

# If the month is 0 then it is Dec 31 of
# the previous year.
if [ $month -eq 0 ]; then
month=12
day=31
year=`expr $year - 1`

# If the month is not zero we need to find
# the last day of the month.
else
case $month in
1|3|5|7|8|10|12) day=31;;
4|6|9|11) day=30;;
2)
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
fi
#echo $year$month$day
if [ `expr $month - 10` -lt 0 ]; then
   month="0"$month
fi    
}
before_day=$1
#echo $before_day
while [ 0 -lt $before_day ]
do
   #echo '-------'
   sub_day
   before_day=`expr $before_day - 1`
   #echo $before_day
done
if [ `expr $day - 10` -lt 0 -a $1 -ne 0 ]; then
   day="0"$day
else
   day=$day
fi
#if [ `expr $month - 10` -lt 0 ]; then
#   month="0"$month
#fi
echo $year$month$day
exit 0 

##############################################################

脚本封装完成后,比如要获取前一天日期:day1=`ksh last_day.sh  1` 

                                                                    echo $day1

获取前几天日期,以此类推。


0 0