使用 bash 脚本检查日期范围

问题描述

我正在尝试制作一个从 2020 年 12 月 24 日到 2021 年 6 月 1 日期间有效的脚本。现在我只能在 2 个日期中使用它:

if [ "$(date +'%m%d')" != "1224" ] && [ "$(date +'%m%d')" != "1226" ];

所以这个脚本应该从 12/24 - 01/06 开始工作。 有什么建议么?谢谢

解决方法

您可以使用 +%s 中的 date 选项将开始/结束日期转换为 epoch time。您使用 -d 选项提供日期。

然后,您再次使用 +%s 检索当前日期并使用标准整数比较进行比较,如下所示:

start=$(date +%s -d '12/24/2020')
finish=$(date +%s -d '06/02/2021')

now=$(date +%s)
if [ $now -ge $start ] && [ $now -lt $finish ]
then
    echo "Do something"
else
    echo "Skip"
fi

编辑:对于完成日期,有必要使用之后您预期的完成日期并使用 -lt 进行比较。这是因为 date 将返回指定日期开始的时间戳。因此,这样做,您最终会在 2021 年 6 月 1 日午夜之前成功进行比较。感谢 @gordon-davisson 指出这一点。