You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bash脚本中从已知日期列表选取过去最近的匹配日期?

问题:从已知日期列表中匹配过去最近的日期

在Bash脚本中,$extracted_date变量存储从文件抓取的任意日期,需要和已知日期列表对比,选出过去最近的匹配日期展示。目前已将所有日期转成epoch秒用于判断先后,但还没完成选取最近日期的逻辑,且已知日期列表未来可能包含跨年度情况(比如财年)。

现有代码如下:

#!/bin/bash

known_dates=(
    "$(date --date '1 January this year' +%s)"
    "$(date --date '1 April this year' +%s)"
    "$(date --date '1 July this year' +%s)"
    "$(date --date '1 October this year' +%s)"
)

extracted_date='14 June 2023'

extracted_time="$(date --date \"${extracted_date}\" +%s)"

for time_in_seconds in ${known_dates[@]}; do
    if (( extracted_time >= time_in_seconds )); then
        echo "after $(date --date \"@${time_in_seconds}\" +'%d %B %Y')"
    else
        echo "before $(date --date \"@${time_in_seconds}\" +'%d %B %Y')"
    fi
done

预期效果:当extracted_date='14 June 2023'时,输出1 April 2023。


解决方案

修改后的代码如下:

#!/bin/bash

# 定义已知日期列表(支持跨年度,可按需添加去年/明年的日期)
known_dates=(
    "$(date --date '1 January this year' +%s)"
    "$(date --date '1 April this year' +%s)"
    "$(date --date '1 July this year' +%s)"
    "$(date --date '1 October this year' +%s)"
    # 示例:添加跨年度日期
    # "$(date --date '1 October last year' +%s)"
)

extracted_date='14 June 2023'
extracted_time="$(date --date "${extracted_date}" +%s)"

# 初始化最近匹配日期的epoch秒变量
latest_match=0

for time_in_seconds in "${known_dates[@]}"; do
    # 仅筛选早于或等于提取日期的已知日期
    if (( extracted_time >= time_in_seconds )); then
        # 更新为更晚的符合条件日期
        if (( time_in_seconds > latest_match )); then
            latest_match=$time_in_seconds
        fi
    fi
done

# 输出结果,处理无匹配的情况
if (( latest_match != 0 )); then
    echo "$(date --date "@${latest_match}" +'%d %B %Y')"
else
    echo "未找到符合条件的过去日期"
fi

逻辑说明

  • 初始化latest_match为0,用于记录符合条件的最近日期epoch秒
  • 遍历已知日期列表时,只保留早于或等于提取日期的日期
  • 在符合条件的日期中,持续更新latest_match为更晚的日期,最终得到过去最近的匹配项
  • 最后将epoch秒转换为格式化日期输出,同时处理无匹配的边界情况

内容的提问来源于stack exchange,提问作者algalg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 00:03:36