想要快速掌握 n8n 的表达式语法并具备“自我修正”能力,需要重点关注两个核心概念:数据类型(Data Types) 和 Luxon 库(日期处理核心)。
n8n 的表达式本质上是 JavaScript,而日期处理专门使用了一个叫 Luxon 的强大代码库。
以下是为你整理的“自学与排错”指南:
1. 核心心法:区分“对象”与“字符串”
-
对象 (Object):
$today是一个“活”的日期对象(Luxon DateTime Object)。它包含日期的所有信息,可以进行数学运算(加减天数)。 -
字符串 (String): 一旦你用了
.toFormat('yyyy-MM-dd'),它就变成了一串死板的文字(如"2025-01-01")。文字是不能直接做减法的。
自检口诀:
“先运算,后格式化”
想计算时间(加减天数)?必须在它还是 对象 ($today) 的时候做。
想输出给人看?最后一步再转成 字符串 (.toFormat)。
2. 必须收藏的三个“官方作弊表”
遇到问题直接查这三个文档:
-
n8n 表达式文档 (Expressions)
-
用途: 了解基础语法,比如怎么引用前一个节点的 JSON 数据 (
$json.field)。 -
重点看: Built-in methods and variables (内置方法与变量) 章节。
-
-
Luxon 官方文档 (尤其是 Math 章节)
-
用途: n8n 的
$today和$now底层就是 Luxon。所有关于时间的操作直接查这里。 -
常用方法:
.plus(),.minus(),.endOf(),.startOf()。
-
-
Luxon 格式化令牌表 (Formatting)
-
用途: 记不住
yyyy还是YYYY?MM还是mm?查这个表。
-
3. 实战速查表 (Cheat Sheet)
与其死记硬背,不如掌握这几个最常用的“万能公式”。
场景 A:时间的加减(数学运算)
使用 .minus() 或 .plus(),参数是一个对象 { unit: number }。
JavaScript
// 前一天 (昨天)
{{ $today.minus({ days: 1 }) }}
// 后一周 (下周)
{{ $today.plus({ weeks: 1 }) }}
// 3个月前
{{ $today.minus({ months: 3 }) }}
场景 B:获取特定时间点(对齐)
使用 .startOf() 或 .endOf()。
JavaScript
// 本月初 (例如 2025-01-01)
{{ $today.startOf('month') }}
// 本年末 (例如 2025-12-31)
{{ $today.endOf('year') }}
场景 C:组合技 (先运算,再对齐,最后格式化)
JavaScript
// 上个月的最后一天,格式化为 "YYYY-MM-DD"
// 逻辑:今天 -> 减1个月 -> 取那个月的月末 -> 格式化
{{ $today.minus({ months: 1 }).endOf('month').toFormat('yyyy-MM-dd') }}
4. 如何自己测试与除错?
不要直接运行整个工作流,利用 n8n 的 Expression Editor(表达式编辑器) 的即时反馈功能。
-
打开任意节点的表达式编辑器。
-
输入代码,看编辑器下方的 Result(结果预览)。
-
如果显示
[Object: DateTime]: 说明你现在手里是个日期对象,可以继续.minus()或.plus()。 -
如果显示
2025-...: 说明变成了字符串,不能再计算了,只能输出。 -
如果显示
NaN或Invalid Date: 说明你在对字符串做数学运算,或者格式写错了。
下一步建议
你可以立刻在 n8n 中打开一个表达式编辑器,试着输入 {{ $today }},然后加上 .minus({ days: 10 }) 看看预览结果的变化。这种“即时反馈”是学习最快的方式。