[Shell]date获取指定日期的后几天

时间:2021-07-02 13:57:16
1. 第一种方式

先把日期转换为秒数,对这个秒数进行加减操作(加上或者减去几天的秒数),在转换为日期

  
  
  1. #! /bin/sh
  2. function nextDayOfDay2 {
  3. start=$1
  4. days=$2
  5. # 日期转换为秒数
  6. seconds=`date -d $1 +%s`
  7. echo "日期秒数 -----> "${seconds}
  8. declare -i index
  9. index=0
  10. while [ ${index} -lt ${days} ]
  11. do
  12. total_seconds=$((seconds + ${index}*86400))
  13. date=`date -d @${total_seconds} +'%Y%m%d'`
  14. echo ${index}" ------> "${date}
  15. index=${index}+1
  16. done
  17. }
  18. nextDayOfDay2 $1 $2
打印从20160629号开始的连续5天日期:
  
  
  1. xiaosi@Qunar:~/company/sh$ bash date.sh 20160629 5
  2. 日期秒数 -----> 1467129600
  3. 0 ------> 20160629
  4. 1 ------> 20160630
  5. 2 ------> 20160701
  6. 3 ------> 20160702
  7. 4 ------> 20160703

2. 第二种方式
  
  
  1. #! /bin/sh
  2. function nextDayOfDay()
  3. {
  4. start=$1
  5. days=$2
  6. startDay=`date +'%Y%m%d' -d ${start}`
  7. echo "日期 -----> "${startDay}
  8. declare -i index
  9. index=0
  10. while [ ${index} -lt ${days} ]
  11. do
  12. date=`date -d "${startDay} ${index} days" +"%Y%m%d"`
  13. echo ${index}" ------> "${date}
  14. index=${index}+1
  15. done
  16. }
  17. nextDayOfDay $1 $2
打印从20160629号开始的连续5天日期:
  
  
  1. xiaosi@Qunar:~/company/sh$ bash date.sh 20160629 5
  2. 日期 -----> 20160629
  3. 0 ------> 20160629
  4. 1 ------> 20160630
  5. 2 ------> 20160701
  6. 3 ------> 20160702
  7. 4 ------> 20160703