在date范围linux中打印date

我是新来的Linux。 如何在指定的date范围内打印和存储date。

例如,我有startdate = 2013-03-01和enddate = 2013-03-25; 我想打印该范围内的所有date。

提前致谢

只要日期是YYYY-MM-DD格式,就可以按照字典顺序对它们进行比较,并让date执行日历算术,而不先转换为秒:

 startdate=2013-03-15 enddate=2013-04-14 curr="$startdate" while true; do echo "$curr" [ "$curr" \< "$enddate" ] || break curr=$( date +%Y-%m-%d --date "$curr +1 day" ) done 

使用[ ... ] ,您需要转义<以避免与输入重定向操作符混淆。

如果它大于结束日期,则具有打印开始日期的疣。

如果你想要“最近”的日期是一个替代是:

 echo {100..1} | xargs -I{} -d ' ' date --date={}' days ago' +"%Y-%m-%d" 

显然不适用于任意的日期范围。

使用date将您的日期转换为秒,做一点数学和转换:

 #/bin/bash dstart=2013-03-01 dend=2013-03-25 # convert in seconds sinch the epoch: start=$(date -d$dstart +%s) end=$(date -d$dend +%s) cur=$start while [ $cur -le $end ]; do # convert seconds to date: date -d@$cur +%Y-%m-%d let cur+=24*60*60 done 

有关日期参数的更多信息,请参阅man date ..

另一种选择是使用dateseqdateutilshttp://www.fresse.org/dateutils/#dateseq ):

 $ dateseq 2013-03-01 2013-03-25 2013-03-01 2013-03-02 2013-03-03 2013-03-04 2013-03-05 2013-03-06 2013-03-07 2013-03-08 2013-03-09 2013-03-10 2013-03-11 2013-03-12 2013-03-13 2013-03-14 2013-03-15 2013-03-16 2013-03-17 2013-03-18 2013-03-19 2013-03-20 2013-03-21 2013-03-22 2013-03-23 2013-03-24 2013-03-25 

稍微改进版本

 #!/bin/bash startdate=2013-03-15 enddate=2013-04-14 curr="$startdate" while true; do [ "$curr" \< "$enddate" ] || { echo "$curr"; break; } echo "$curr" curr=$( date +%Y-%m-%d --date "$curr +1 day" ) done