LINUX.ORG.RU

bash date

 ,


0

1

Подскажите как отнять дату? Необходимо отнять дату из переменной с текущей, и если разница дней равняется 3, то выполняем условие

Решил преобразовать дату в одно число

date1="25.01.2020"
curent=$(date +"%d.%m.%Y" | tr -d ".")
previous=$(echo $date1 | tr -d ".")
result=$(($curent-$previous))
if [[ "$result" -eq "3000000" ]]
then
   echo "время истекло"
else
  echo "еще не время"
fi

Данное решение работает, пока не наступает конец месяца, или начала нового


Обычный подход - перевод в unixtime, проведение операций, пересчёт результата в нужные единицы измерения

zolden ★★★★★ ()

-eq

А если 3000001, то тоже ещё не время.

mord0d ★★★★★ ()
Последнее исправление: mord0d (всего исправлений: 1)

Может пойти от обратного? Найти дату на 3 дня ранее текущей и сравнить текстом

$ date -d '-3 days' +'%d.%m.%Y'
27.01.2020
CaHbl4 ()

Не надо самому работать с датами (вычитать дни). Календарь - это сложно, високосные года и 61е секунды так и норовят укусить. Есть специальные инструменты для работы с датами. В bash проще сначала перевести в unixtime.

date1="2020-01-25"
if [[ "$(date -d "now 3 days ago 00:00" +%s)" -eq "$(date -d "$date1" +%s)" ]]
then
   echo "время истекло"
else
   echo "еще не время"
fi

PS %d.%m.%Y - плохой формат даты - криво сортируется, не парсится стандартными средствами.

legolegs ★★★★★ ()
Последнее исправление: legolegs (всего исправлений: 3)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.