gpt4 book ai didi

linux - 如何使用 bash 查找日期范围内的特定日期?

转载 作者:太空宇宙 更新时间:2023-11-04 04:54:50 26 4
gpt4 key购买 nike

我想使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com