在Mac OS X shell脚本中从开始日期循环到结束日期

时间:2010-12-14 00:20:36

标签: macos bash shell date

OS X(Snow Leopard)上的日期函数没有像GNU版本那样的--date选项,我无法弄清楚如何在OS X上获得以下内容:

startdate=2010-01-01
enddate=2010-01-31
foldate="$startdate"

until [ "$foldate" == "$enddate" ]
do
    # do something with the date here - like pass it as a parameter to a command
    foldate=`/bin/date --date "$foldate 1 day" +%Y-%m-%d`
done

解决了SiegeX的答案:

startdate=2010-01-01
enddate=2010-01-31

sDateTs=`date -j -f "%Y-%m-%d" $startdate "+%s"`
eDateTs=`date -j -f "%Y-%m-%d" $enddate "+%s"`
dateTs=$sDateTs
offset=86400

while [ "$dateTs" -le "$eDateTs" ]
do
  date=`date -j -f "%s" $dateTs "+%Y-%m-%d"`
  printf '%s\n' $date
  dateTs=$(($dateTs+$offset))
done

1 个答案:

答案 0 :(得分:2)

运行man date阅读日期的联机帮助页,然后查看-v选项。这是一段摘录:

  

-v 调整(即拍摄   当前日期并显示结果   调整;实际上没有设定                日期)第二,分钟,小时,月份日,工作日,   根据val的月份或年份。如果                val前面带有加号或减号,日期为   向前或向后调整   根据                到剩下的字符串,否则是相关的部分   日期已设定。日期可以                使用这些标志根据需要调整了多次。旗帜是   按照给定的顺序处理。