笔者在使用 date 命令计算时间周期时遇到过一个坑。
date '+%F' -d '20260228 -1 month'# 2026-01-31
以为会得到2026-01-28, 但实际上得到的是 2026-01-31。
再看下面这些例子。
date '+%F' -d '20260228 +1 month'# 2026-03-28date '+%F' -d '20260228 +28 day'# 2026-03-28date '+%F' -d '20260228 -1 month'# 2026-01-31date '+%F' -d '20260228 -31 day'# 2026-01-28date '+%F' -d '20260228 +2 month'# 2026-04-25date '+%F' -d '20260228 +59 day'# 2026-04-28date '+%F' -d '20260228 -2 month'# 2026-01-03date '+%F' -d '20260228 -62 day'# 2025-12-28
所以通过 -d 选项和 month 来计算相对时间时要小心。
至于为什么笔者没有细纠,网上也有人遇到过这个问题:linux 下 date 的陷阱[1]。
读者朋友们有知道具体规则的,可评论区留言。
参考资料
[1] linux 下 date 的陷阱: https://www.cnblogs.com/billyxp/archive/2013/01/31/2886733.html