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

如何在Bash中基于当前日期获取上一个3月2日(CI流程适用)

用date命令实现CI流程中获取最近的3月2日

需求明确:当当前日期在当年3月2日及之后,返回当年3月2日;若当前日期在当年3月2日之前,返回上一年的3月2日。以下分两种常见date命令版本给出实现方案:

GNU date(Linux发行版通用)

直接通过日期解析和数字格式比较实现:

# 生成当年3月2日的标准格式日期
target_date=$(date -d "$(date +%Y)-03-02" +%Y-%m-%d)
# 将当前日期和目标日期转为数字格式(如20240223)进行大小比较
if [[ $(date +%Y%m%d) -lt $(date -d "$target_date" +%Y%m%d) ]]; then
  # 当前日期早于当年3月2日,将目标日期减一年
  target_date=$(date -d "$target_date -1 year" +%Y-%m-%d)
fi
# 输出最终结果
echo "$target_date"

BSD date(macOS/FreeBSD等系统)

BSD版本date参数逻辑与GNU不同,需通过日期字符串解析和年份计算实现:

# 获取当前年份和当前日期的数字格式
current_year=$(date +%Y)
current_date_num=$(date +%Y%m%d)
# 生成当年3月2日的数字格式,用于比较
mar_2_num=$(date -jf "%Y-%m-%d" "${current_year}-03-02" +%Y%m%d)

# 根据日期比较结果确定最终目标日期
if [[ $current_date_num -lt $mar_2_num ]]; then
  last_mar_2=$(date -jf "%Y-%m-%d" "$((current_year-1))-03-02" +%Y-%m-%d)
else
  last_mar_2=$(date -jf "%Y-%m-%d" "${current_year}-03-02" +%Y-%m-%d)
fi
# 输出最终结果
echo "$last_mar_2"

验证示例

  • 若当前日期为2024-02-23,执行命令后返回2023-03-02
  • 若当前日期为2024-03-23,执行命令后返回2024-03-02

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 18:37:12