Этот код находит третий четверг после заданной даты.
#!/bin/bash
start=2018-04-24
thursdayOfCurrentWeek=$((4-$( date +%u --date $start )))
if [[ $thursdayOfCurrentWeek -ge 0 ]]
then
date -d "$start + $thursdayOfCurrentWeek days + 2 weeks" +%F
else
date -d "$start + $thursdayOfCurrentWeek days + 3 weeks" +%F
fi
Давайте разделим его:
date +%u --date $start
Возвращает день недели $start
в виде числа (1= Понедельник, ..., 4 = четверг).
$((4-$( date +%u --date $start )))
Подсчитывает, сколько дней нужно добавить к дате $start
, чтобы получить четверг текущей недели.
if [[ $thursdayOfCurrentWeek -ge 0 ]]
Если дата четверга сегодня или позже на этой неделе, то добавьте только 2 недели к следующему четвергу, поскольку это уже один из следующих 3 четвергов.
date -d "$start + $thursdayOfCurrentWeek days + 2 weeks" +%F
# or
date -d "$start + $thursdayOfCurrentWeek days + 3 weeks" +%F
Добавьте или вычтите $start
укажите дни, чтобы получить четверг текущей недели, и добавьте 2 или 3 недели в зависимости от того, когда четверг этой недели.
Если дата $start
- четверг, и она не должна учитываться как единая.из трех просто замените оператор if следующим образом:
if [[ $thursdayOfCurrentWeek -gt 0 ]]
Это более общий ответ (потому что дата начала не обязательно должна быть пятницей), чем то, что вы ищете, но это такжеработает для вашего случая использования.
Надеюсь, это поможет.
PS Вам не нужно$end
дата.
РЕДАКТИРОВАТЬ:
Если вы действительно хотите минимальную версию, если $start
всегда пятница, вы можете сделать это:
#!/bin/bash
start=2018-03-23
date -d "$start - 1 day + 3 weeks" +%F