SHELL打印两个日期之间的日期
[root@umout shell]# cat date_to_date.sh
THIS_PATH=$(cd `dirname $0`;)
cd $THIS_PATH
##要求传入的数据格式为yyyyMMdd的两个开始和结束参数,如20170201 20170310
start_input=$1
end_input=$2
##将输入的日期转为的时间戳格式
startDate=`date -d "${start_input}" +%s`
endDate=`date -d "${end_input}" +%s`
##计算两个时间戳的差值除于每天86400s即为天数差
stampDiff=`expr $endDate - $startDate`
dayDiff=`expr $stampDiff / 86400`
##根据天数差循环输出日期
for((i=0;i<$dayDiff;i++))
do
process_date=`date -d "${start_input} $i day" +'%Y-%m-%d'`
echo $process_date
done
输出:
[root@nq shell]# sh date_to_date.sh 20170201 20170310
... ...
2017-02-13
2017-02-14
2017-02-15
2017-02-16
2017-02-17
2017-02-18
2017-02-19
2017-02-20
2017-02-21
2017-02-22
2017-02-23
2017-02-24
2017-02-25
2017-02-26
2017-02-27
2017-02-28
2017-03-01
2017-03-02
2017-03-03
2017-03-04
... ...
将时间转换为时间戳进行计算
[root@nq aabbcc]# cat time.sh
#!/bin/sh
yesterday="2018-02-26"
endDate=`date -d "${yesterday}" +%s`
# 777600 9天前的时间
startDate=777600
# 获取时间中间的差
stampDiff=`expr ${endDate} - ${startDate}`
# 时间的开始点
aa=$(date +%Y%m%d -d "1970-01-01 UTC ${stampDiff} seconds")
bb=$(date +%Y%m%d -d "1970-01-01 UTC ${endDate} seconds")
echo ${aa}
echo ${bb}
输出:
20180217
20180226