日期加减法:如何计算“3天后”或“上个月最后一天”的具体日期?

2026-01-24 10 0

别再人工算日期了,你的 n8n 已经“累”了

笔者最近在 N8N大学 的交流群里潜水,发现一个高频痛点:很多同学在做自动化时,总要处理日期计算。比如,“每隔 3 天给用户发一封邮件”、“获取上个月的销售报表”、“计算任务的截止日期”。

最原始的做法是:手动算好日期,硬编码写死在流程里。一旦跨月、跨年,或者遇到闰年,这代码就得重改。这种“体力活”,n8n 早就替你解决了。今天,咱们就来把 n8n 里的日期加减法彻底讲透,让你从“日历计算器”变成真正的流程架构师。

核心武器:Date & Time 节点

在 n8n 的宇宙里,处理时间的绝对主力是 Date & Time 节点。它藏在 Code 节点的兄弟列表里,专门干这种“细活”。

别被“节点”这个词吓到,你只需要记住:这个节点能把人类看得懂的时间(如 2023-10-01),变成机器能算的格式,算完再变回来。它主要干两件事:

  1. 四则运算:加几天、减几小时、加几个月。
  2. 魔法转换:把“上个月最后一天”这种模糊指令,变成“2023-09-30”这种精准数据。

实战一:计算“3天后”或“2小时前”

这是最基础的操作,也是新手最容易混淆的地方。很多同学习惯用 JS 代码节点写 `new Date().getTime() + 3*24*60*60*1000`,太麻烦了,还容易出错。

直接用 Date & Time 节点,三步搞定:

1. 确定基准时间

你是要基于“现在”计算,还是基于“数据流里的某个时间”?在节点的 Date 参数里,你可以填入 {{ Date.now() }} 代表当前时间,或者填入 {{ $json.createTime }} 这种从前一个节点传过来的时间字段。

2. 做加减法

找到 Operation 选项,选择 Add(加)或者 Subtract(减)。

接下来是关键,很多人栽在这里:Quantity 填数字,Unit 选单位。比如要算“3天后”,Quantity 填 3,Unit 选 days。如果要算“2小时前”,Quantity 填 2,Unit 选 hours

3. 格式化输出

计算完后,n8n 会给你一个时间戳或者 ISO 格式。如果你需要特定格式(比如 2024-05-20),在下方的 Format 里填入 yyyy-MM-dd 即可。

实战二:搞定“上个月最后一天”这种高难度动作

“上个月最后一天”是很多财务、报表自动化的噩梦。因为每个月天数不一样,2月还要看闰年。

在 n8n 里,这其实是个“取巧”的数学问题。核心逻辑是:先跳到下个月,然后减去 1 天。

操作步骤:

  1. 日期操作:选择 Date & Time 节点。
  2. 基准时间:依然填入你的基准时间(比如 {{ Date.now() }})。
  3. 加月份:Operation 选 Add,Quantity 填 1,Unit 选 months。这一步让你跳到了“下个月”。
    (注意:如果是“上个月”,这里就选 Subtract,Quantity 1,Unit months)
  4. 设置日期为 1 号:这一步是为了消除日期差异。在 Format 里,我们强制格式化为 yyyy-MM-01。这样不管今天是 30 号还是 31 号,结果都变成了“下个月 1 号”。
  5. 再减一天:这是最后一步。再次拖入一个 Date & Time 节点,或者如果你在同一个节点里,需要利用 JS 逻辑。但最简单的办法是:再做一次减法。Operation 选 Subtract,Quantity 填 1,Unit 选 days

最终,你就能得到完美的“上个月最后一天”或“下个月第一天”。

笔者提示:如果你觉得拖两个节点太麻烦,直接用 Code 节点写 JS 也是可以的,但 Date & Time 节点的可读性更强,维护起来更方便。

避坑指南:时区与闰年

在 N8N大学 的教科书里,不讲报错的案例就是耍流氓。

坑点 1:时区(Timezone)

n8n 默认使用的是服务器的 UTC 时间。如果你在中国,服务器在海外,你算出来的“今天”可能比实际晚 8 小时。
解决方案:在 Date & Time 节点的 Timezone 参数里,手动填入 Asia/Shanghai。这一行代码能救你一命。

坑点 2:闰年(Leap Year)

很多人喜欢用“加 86400 秒”的方式算第二天,这在闰年(2月29日)会直接翻车。
解决方案:永远使用 daysmonths 作为单位,别用秒。让 n8n 的底层库去处理闰秒和闰年,别自己造轮子。

常见问题 (FAQ)

Q1: n8n 节点计算出的时间比实际晚了 8 小时,怎么破?

A: 这是典型的时区问题。请检查你的 Date & Time 节点里,是否设置了 Timezone 参数。如果留空,默认是 UTC。请设置为 Asia/Shanghai 或你所在的时区。

Q2: 我想计算“下周三”的日期,该怎么操作?

A: 这需要一点 JS 逻辑。虽然 Date & Time 节点可以加天数,但“下周三”这种相对“星期”的计算,最好在 Code 节点里用 JavaScript 处理。逻辑是:获取当前是周几,算出差值,加上天数。不过,简单的加 7 天然后取整也是个取巧的方法。

Q3: 这个功能免费版 n8n 能用吗?

A: 完全可以。Date & Time 是 n8n 的核心基础节点,开源版、Cloud 免费版都包含,没有任何限制。放心用!

总结与资源

日期计算是自动化流程里的基石。掌握了 Date & Time 节点,你就拥有了穿越时间的能力。

核心回顾:

  • 基础加减:用 Operation 配合 Unit
  • 取巧计算(如月末):利用“加月、取1号、减1天”的逻辑。
  • 避坑必做:永远指定 Timezone

想获取更多 n8n 硬核实操教程?欢迎关注 N8N大学 (n8ndx.com),我们只讲真东西。

相关文章

n8n Error Handling 节点报错太心烦?试试这些更灵活的替代方案
n8n 节点报错了?用 Error Handling 让它自动重试并通知你
n8n Wait节点在数据同步中的延迟控制实战
n8n Wait节点免费版:我能用它实现定时任务吗?
n8n Error Handling节点:当自动化流程“翻车”时,如何让它自动“扶起来”?
n8n Error Handling节点报错常见问题解决

发布评论