萬能的計算日期函式(轉)
萬能的計算日期函式(轉)[@more@]#!/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"
####作者: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"
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617542/viewspace-945643/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 計算日期的函式函式
- Shell 計算明天和昨天日期的函式(轉)函式
- Mysql中日期計算函式MySql函式
- SQL 10 函式 3 日期時間函式 - 5 計算日期差額SQL函式
- Oracle的日期函式(轉)Oracle函式
- 函式:萬能的百寶箱函式
- js日期轉換函式JS函式
- 計算Java日期 (轉)Java
- 日期轉換為raw的函式函式
- SQL Server日期計算(使用DATEADD和DATEDIFF函式)SQLServer函式
- [轉]oracle日期函式集錦Oracle函式
- Oracle 函式大全(字串函式,數學函式,日期函式,邏輯運算函式,其他函式)Oracle函式字串
- SQL Server日期計算 (轉)SQLServer
- [轉載]學習日期、日期格式、日期的解析和日期的計算[程式碼]
- 日期函式函式
- Oracle的日期函式Oracle函式
- 關於日期計算的問題 (轉)
- SQL函式之日期函式SQL函式
- python中關於時間和日期函式的常用計算總結Python函式
- ABAP日期函式函式
- Sybase日期函式函式
- sql 日期函式SQL函式
- Haskell 中的日期函式Haskell函式
- php日期時間計算,轉載PHP
- 【Mysql 學習】日期函式函式MySql函式
- 字元函式、數字函式和日期函式字元函式
- MySQL(四)日期函式 NULL函式 字串函式MySql函式Null字串
- 日期計算
- 日期函式以及常見的日期表達函式
- DB2將字串轉化為日期的函式DB2字串函式
- SQLserver中用convert函式轉換日期格式SQLServer函式
- JS-計算日期差值;計算日期之間的月數JS
- 【機器學習】SVM核函式的計算機器學習函式
- SPL 的日期時間函式函式
- oracle interval日期函式的bug!Oracle函式
- oracle interval日期函式的bugOracle函式
- 計算2個日期間的所有日期
- SQLSERVER日期函式(zt)SQLServer函式