我想使用bash在一系列日期中搜索第三个星期四。
这是我的代码:
#!/bin/bash
start=2018-03-23
end=2018-04-22
while ! [[ $start > $end ]]; do
echo $start
start=$(date -d "$start+third Thursday" +%F)
done
看起来最后一部分“$ start + third Thursday”效果不佳,
但仅使用日期和“第三个星期四”的作品:
date -d "third Thursday" +%F
答案 0 :(得分:1)
此代码在给定日期之后找到第三个星期六。
#!/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