Как увеличить дату в bash script

134
13

У меня есть bash script, который принимает аргумент даты (yyyy-mm-dd)


Я конвертирую его в секундах с помощью


startdate="$(date -d"$1" +%s)";

Мне нужно сделать так, чтобы она повторялась 8 раз, каждый раз увеличивая дату эпохи на 1 день, а затем отображая ее в формате mm-dd-yyyy

спросил(а) 2013-09-09T23:52:00+04:00 6 лет, 5 месяцев назад
1
Решение
225

Используйте команду date для добавления дней к существующим датам.


Следующее:


DATE=2013-05-25

for i in {0..8}
do
NEXT_DATE=$(date +%m-%d-%Y -d "$DATE + $i day")
echo "$NEXT_DATE"
done

дает:


05-25-2013
05-26-2013
05-27-2013
05-28-2013
05-29-2013
05-30-2013
05-31-2013
06-01-2013
06-02-2013

Обратите внимание, что это хорошо работает в вашем случае, но другие форматы даты, такие как yyyymmdd, возможно, должны включать "UTC" в строку даты (например, date -ud "20130515 UTC + 1 day")

ответил(а) 2013-09-10T00:34:00+04:00 6 лет, 5 месяцев назад
85

startdate=$(date -d"$1" +%s)
next=86400 # 86400 is one day

for (( i=startdate; i < startdate + 8*next; i+=next )); do
date -d"@$i" +%d-%m-%Y
done

ответил(а) 2013-09-09T23:56:00+04:00 6 лет, 5 месяцев назад
49

Еще один способ увеличить или уменьшить дни с сегодняшнего дня, что немного компактнее:


$ date %y%m%d ## show the current date
$ 20150109
$ ## add a day:
$ echo $(date %y%m%d -d "$(date) + 1 day")
$ 20150110
$ ## Subtract a day:
$ echo $(date %y%m%d -d "$(date) - 1 day")
$ 20150108
$

ответил(а) 2015-01-10T00:15:00+03:00 5 лет, 1 месяц назад
35

Приращение даты в bash script и создание структуры папок на основе Year, Month и Date для организации большого количества файлов из выхода командной строки.


for m in {0..100}
do
folderdt=$(date -d "Aug 1 2014 + $m days" +'%Y/%m/%d')
procdate=$(date -d "Aug 1 2014 + $m days" +'%Y.%m.%d')
echo $folderdt
mkdir -p $folderdt
#chown <user>:<group> $folderdt -R
cd $folderdt
#commandline --process-date $procdate
cd -
done

ответил(а) 2016-01-13T05:50:00+03:00 4 года, 1 месяц назад
35

Не так просто увеличивать количество дней. Обычно это делается путем преобразования григорианской даты в юлианский день. Затем вы можете увеличить день. А после этого вы вычисляете григорианскую дату. Вот пример кода:


http://it.toolbox.com/wiki/index.php/Convert_a_date_to_a_Julian_day


http://it.toolbox.com/wiki/index.php/Convert_a_Julian_day_to_a_date

ответил(а) 2013-09-10T00:01:00+04:00 6 лет, 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема