想要快速掌握 n8n 的表达式语法并具备“自我修正”能力,需要重点关注两个核心概念:数据类型(Data Types)Luxon 库(日期处理核心)

n8n 的表达式本质上是 JavaScript,而日期处理专门使用了一个叫 Luxon 的强大代码库。

以下是为你整理的“自学与排错”指南:

1. 核心心法:区分“对象”与“字符串”

  • 对象 (Object): $today 是一个“活”的日期对象(Luxon DateTime Object)。它包含日期的所有信息,可以进行数学运算(加减天数)。

  • 字符串 (String): 一旦你用了 .toFormat('yyyy-MM-dd'),它就变成了一串死板的文字(如 "2025-01-01")。文字是不能直接做减法的。

自检口诀:

“先运算,后格式化”

想计算时间(加减天数)?必须在它还是 对象 ($today) 的时候做。

想输出给人看?最后一步再转成 字符串 (.toFormat)。

2. 必须收藏的三个“官方作弊表”

遇到问题直接查这三个文档:

  1. n8n 表达式文档 (Expressions)

    • 用途: 了解基础语法,比如怎么引用前一个节点的 JSON 数据 ($json.field)。

    • 重点看: Built-in methods and variables (内置方法与变量) 章节。

    • 参考: n8n Expressions Documentation

  2. Luxon 官方文档 (尤其是 Math 章节)

    • 用途: n8n 的 $today$now 底层就是 Luxon。所有关于时间的操作直接查这里。

    • 常用方法: .plus(), .minus(), .endOf(), .startOf()

    • 参考: Luxon Documentation - Math

  3. Luxon 格式化令牌表 (Formatting)

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(表达式编辑器) 的即时反馈功能。

  1. 打开任意节点的表达式编辑器。

  2. 输入代码,看编辑器下方的 Result(结果预览)。

  3. 如果显示 [Object: DateTime]: 说明你现在手里是个日期对象,可以继续 .minus().plus()

  4. 如果显示 2025-...: 说明变成了字符串,不能再计算了,只能输出。

  5. 如果显示 NaNInvalid Date: 说明你在对字符串做数学运算,或者格式写错了。


下一步建议

你可以立刻在 n8n 中打开一个表达式编辑器,试着输入 {{ $today }},然后加上 .minus({ days: 10 }) 看看预览结果的变化。这种“即时反馈”是学习最快的方式。