我想使用 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 Friday”效果不佳,
但是单独使用日期和“第三个星期四”是有效的:
date -d "third Thursday" +%F
最佳答案
此代码查找给定日期之后的第三个星期四。
#!/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
关于linux - 如何使用 bash 查找日期范围内的特定日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50028979/