Linux bash脚本校验输入日期是否距当前日期满7天及以上
Bash 实现日期校验:判断输入日期是否距今已满7天及以上
实现原理
将输入日期、当前日期都转换为Unix时间戳(从1970-01-01 00:00:00 UTC到对应时间的秒数),计算二者的差值后换算为天,和7做比较即可。本方案基于GNU Date实现,适配绝大多数Linux发行版。
完整脚本示例
#!/bin/bash # 校验是否传入日期参数 if [ $# -ne 1 ]; then echo "使用方式:$0 <待校验日期,格式如YYYY-MM-DD>" exit 1 fi INPUT_DATE="$1" # 校验输入日期是否合法 if ! date -d "$INPUT_DATE" +%s >/dev/null 2>&1; then echo "错误:输入的日期格式不合法,请使用GNU Date可识别的格式(如YYYY-MM-DD)" exit 1 fi # 转换为时间戳 INPUT_TIMESTAMP=$(date -d "$INPUT_DATE" +%s) CURRENT_TIMESTAMP=$(date +%s) # 计算秒数差 DIFF_SEC=$((CURRENT_TIMESTAMP - INPUT_TIMESTAMP)) # 7天对应的秒数:7*24*3600=604800 SEVEN_DAYS_SEC=604800 if [ $DIFF_SEC -ge $SEVEN_DAYS_SEC ]; then echo "校验结果:输入日期 $INPUT_DATE 距离当前已满7天或更久" exit 0 else echo "校验结果:输入日期 $INPUT_DATE 距离当前不满7天" exit 2 fi
使用说明
- 把上述代码保存为
check_7days.sh,给执行权限:chmod +x check_7days.sh - 运行示例:
- 校验横杠分隔格式日期:
./check_7days.sh 2024-05-01 - 校验斜杠分隔格式日期:
./check_7days.sh 2024/05/01
- 校验横杠分隔格式日期:
自定义适配说明
- 如果需要按自然日计算(忽略时分秒,只要日期差≥7就算满7天),可以把时间戳转换逻辑替换为以下代码,取当日0点的时间戳计算:
INPUT_TIMESTAMP=$(date -d "$(date -d "$INPUT_DATE" +%Y-%m-%d) 00:00:00" +%s) CURRENT_TIMESTAMP=$(date -d "$(date +%Y-%m-%d) 00:00:00" +%s) - 如果输入的是自定义格式日期(如DD/MM/YYYY),可以用date命令先转成标准格式,需要保证date能识别你的输入格式即可。
- macOS系统默认自带的是BSD Date,参数不兼容,可先安装
coreutils后把脚本中的date替换为gdate使用。
内容的提问来源于stack exchange,提问作者Samuel
相关产品推荐
相关产品推荐

