datebeg="2012-04-01"dateend="2012-05-30"beg_s=`date -d "$datebeg" +%s`end_s=`date -d "$dateend" +%s`while [ "$beg_s" -le "$end_s" ];do day=`date -d @$beg_s +"%Y-%m-%d"`; beg_s=$((beg_s+86400));done
在Shell下,可以通過如下命令設置指定日期往前或者往後N天
date -d "$KNOW_DATE UTC +N days" +"%Y%m%d"
date -d "$KNOW_DATE UTC -N days" +"%Y%m%d"
由此可得到下面這種日期循環的代碼:
b=`date -d "$BEGIN_DATE" +"%Y%m%d"`
e=`date -d "$ENDBEGIN_DATE" +"%Y%m%d"`
#前面兩條語句的作用是將日期轉換成yyyyMMdd這種格式,後面要將它們當成數字來比較
while [ $b -le $e ]; do
#do something here
b=`date -d "$b UTC +1 day" +"%Y%m%d"`
done
這種方式可以按隔N天的方式,也可以換成其他時間維度
另外一種是化成秒再計算,代碼如下:
b=`date -d $BEGIN_DATE" +"%s"`
e=`date -d "$END_DATE" +"%s"`
while [ $b -le $e ]; do
#do something here
d=`date -d “1970-01-01 UTC "$b" seconds" +”%Y%m%d"`
b=`expr $b + 86400` #也可以用:(($b+=86400))或者let 'b+=86400'
done