Цикл от начальной до конечной даты в скрипте оболочки Mac OS X - PullRequest
11 голосов
/ 14 декабря 2010

Функция даты в OS X (Snow Leopard) не имеет опции --date, как версия GNU, и я не могу понять, как получить эквивалент следующего в 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 Ответ

2 голосов
/ 14 декабря 2010

Прочтите справочную страницу вашей даты, набрав man date и посмотрите на параметр -v.Вот выдержка:

-v Настройка (т. Е. Взять текущую дату и отобразить результат корректировки; фактически не устанавливать дату) секунда, минута, час, день месяца, день недели, месяц или год в соответствии с val.Если перед значком val стоит знак плюс или минус, дата корректируется вперед или назад в соответствии с оставшейся строкой, в противном случае устанавливается соответствующая часть даты.Дата может быть скорректирована столько раз, сколько требуется с помощью этих флагов.Флаги обрабатываются в указанном порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...