日期时间处理是工作流自动化中最常见的需求。本教程将带你从零开始,掌握n8n Date & Time节点的所有操作,让你的工作流在处理时间数据时游刃有余。
想象一下这些场景:
所有这些需求,Date & Time节点都能轻松搞定!
Date & Time节点是n8n内置的时间处理专家。它提供7种不同的操作,让你能够:
n8n的所有时间操作都依赖于时区设置。记住这个优先级:
💡 建议:在工作流设置中明确指定时区,避免时间混乱!
使用场景:你需要一个"起点"时间来进行其他计算
配置步骤:
current_date)代码示例:
{
"operation": "getCurrentDate",
"includeCurrentTime": true,
"outputFieldName": "now"
}实际效果:
输入:(无)
输出:{ "now": "2025-12-01T12:24:00Z" }使用场景:设置提醒日期、计算截止日期等
配置步骤:
deadline)时间单位对照表:
| 单位 | 说明 | 示例 |
|---|---|---|
| Year | 年 | 加1年 |
| Month | 月 | 加3个月 |
| Week | 周 | 加2周 |
| Day | 天 | 加7天 |
| Hour | 小时 | 加2小时 |
| Minute | 分钟 | 加30分钟 |
| Second | 秒 | 加500秒 |
代码示例:
{
"operation": "addToDate",
"dateToAddTo": "{{ $json.start_date }}",
"timeUnitToAdd": "day",
"duration": 7,
"outputFieldName": "due_date"
}实际效果:
输入:start_date = 2025-12-01
输出:due_date = 2025-12-08(一周后的日期)使用场景:从完整日期中提取年份、月份、日期等
可提取的部分:
代码示例:
{
"operation": "extractDatePart",
"date": "{{ $json.birth_date }}",
"part": "year",
"outputFieldName": "birth_year"
}实际效果:
输入:birth_date = 1990-05-15T14:30:00Z
输出:birth_year = 1990使用场景:让日期显示成用户能看懂的格式
预设格式选项:
| 格式 | 示例输出 | 使用场景 |
|---|---|---|
| MM/DD/YYYY | 12/01/2025 | 美国风格 |
| YYYY/MM/DD | 2025/12/01 | 标准排序 |
| MMMM DD YYYY | December 01 2025 | 友好阅读 |
| MM-DD-YYYY | 12-01-2025 | 短横线分隔 |
| YYYY-MM-DD | 2025-12-01 | ISO标准 |
自定义格式符号(使用Luxon标准):
| 符号 | 含义 | 示例 |
|---|---|---|
| yyyy | 4位年份 | 2025 |
| MM | 2位月份 | 01, 12 |
| dd | 2位日期 | 01, 31 |
| HH | 2位小时(24h) | 00, 23 |
| mm | 2位分钟 | 00, 59 |
| ss | 2位秒 | 00, 59 |
| MMMM | 完整月份名 | January, December |
| cccc | 完整星期名 | Monday, Sunday |
代码示例-预设格式:
{
"operation": "formatDate",
"date": "{{ $json.order_date }}",
"format": "YYYY-MM-DD",
"outputFieldName": "formatted_date"
}代码示例-自定义格式:
{
"operation": "formatDate",
"date": "{{ $json.event_date }}",
"format": "Custom Format",
"customFormat": "yyyy年MM月dd日 HH:mm",
"outputFieldName": "chinese_date"
}实际效果:
输入:event_date = 2025-12-01T14:30:00Z
输出1(ISO):formatted_date = 2025-12-01
输出2(自定义):chinese_date = 2025年12月01日 14:30使用场景:计算项目还剩几天、员工工作多少年等
配置步骤:
代码示例:
{
"operation": "getTimeBetweenDates",
"startDate": "{{ $json.project_start }}",
"endDate": "{{ $json.project_end }}",
"units": ["day", "hour"],
"outputFieldName": "duration"
}实际效果:
输入:
start = 2025-01-01
end = 2025-01-10
输出:duration = {
"day": 9,
"hour": 0
}ISO格式输出示例:
P1Y3M13D = 1年3个月13天P5DT2H30M = 5天2小时30分钟使用场景:简化日期,便于数据分组或统计
配置步骤:
代码示例:
{
"operation": "roundDate",
"date": "{{ $json.event_time }}",
"mode": "down",
"toNearest": "hour",
"outputFieldName": "rounded_time"
}实际效果:
输入:event_time = 2025-12-01T14:37:45Z
舍入到小时(向下):rounded_time = 2025-12-01T14:00:00Z使用场景:计算截止日期前多少天、生日前几周等
配置步骤:
代码示例:
{
"operation": "subtractFromDate",
"dateToSubtractFrom": "{{ $json.deadline }}",
"timeUnitToSubtract": "day",
"duration": 3,
"outputFieldName": "reminder_date"
}实际效果:
输入:deadline = 2025-12-10
输出:reminder_date = 2025-12-07(3天前)创建一个工作流,当收到订单时:
将以下JSON导入到你的n8n中,即可一键使用!
{
"name": "订单时间跟踪系统",
"nodes": [
{
"parameters": {},
"id": "d4e5f6g7h8i9",
"name": "Manual Trigger",
"type": "n8n-nodes-base.manualTrigger",
"typeVersion": 1,
"position": [250, 300]
},
{
"parameters": {
"mode": "set",
"values": {
"string": [
{
"name": "order_date",
"value": "{{ $now.toISO() }}"
},
{
"name": "order_id",
"value": "ORD-20251201-001"
},
{
"name": "product_name",
"value": "智能手环"
},
{
"name": "amount",
"value": "299"
}
]
}
},
"id": "a1b2c3d4e5f6",
"name": "初始化订单信息",
"type": "n8n-nodes-base.set",
"typeVersion": 3,
"position": [450, 300],
"connections": {
"main": [
[
{
"node": "f7g8h9i0j1k2",
"type": "main",
"index": 0
}
]
]
}
},
{
"parameters": {
"operation": "addToDate",
"dateToAddTo": "{{ $json.order_date }}",
"timeUnitToAdd": "day",
"duration": 2,
"outputFieldName": "expected_ship_date",
"includeInputFields": true
},
"id": "f7g8h9i0j1k2",
"name": "计算发货日期(+2天)",
"type": "n8n-nodes-base.dateTime",
"typeVersion": 2,
"position": [650, 300],
"connections": {
"main": [
[
{
"node": "g8h9i0j1k2l3",
"type": "main",
"index": 0
}
]
]
}
},
{
"parameters": {
"operation": "addToDate",
"dateToAddTo": "{{ $json.expected_ship_date }}",
"timeUnitToAdd": "day",
"duration": 5,
"outputFieldName": "expected_delivery_date",
"includeInputFields": true
},
"id": "g8h9i0j1k2l3",
"name": "计算收货日期(+5天)",
"type": "n8n-nodes-base.dateTime",
"typeVersion": 2,
"position": [850, 300],
"connections": {
"main": [
[
{
"node": "h9i0j1k2l3m4",
"type": "main",
"index": 0
}
]
]
}
},
{
"parameters": {
"operation": "formatDate",
"date": "{{ $json.order_date }}",
"format": "YYYY-MM-DD",
"outputFieldName": "formatted_order_date",
"includeInputFields": true
},
"id": "h9i0j1k2l3m4",
"name": "格式化订单日期",
"type": "n8n-nodes-base.dateTime",
"typeVersion": 2,
"position": [1050, 300],
"connections": {
"main": [
[
{
"node": "i0j1k2l3m4n5",
"type": "main",
"index": 0
}
]
]
}
},
{
"parameters": {
"operation": "formatDate",
"date": "{{ $json.expected_delivery_date }}",
"format": "MMMM DD YYYY",
"outputFieldName": "friendly_delivery_date",
"includeInputFields": true
},
"id": "i0j1k2l3m4n5",
"name": "友好格式收货日期",
"type": "n8n-nodes-base.dateTime",
"typeVersion": 2,
"position": [1250, 300],
"connections": {
"main": [
[
{
"node": "j1k2l3m4n5o6",
"type": "main",
"index": 0
}
]
]
}
},
{
"parameters": {
"operation": "getTimeBetweenDates",
"startDate": "{{ $json.order_date }}",
"endDate": "{{ $json.expected_delivery_date }}",
"units": ["day"],
"outputFieldName": "delivery_days",
"includeInputFields": true
},
"id": "j1k2l3m4n5o6",
"name": "计算交付天数",
"type": "n8n-nodes-base.dateTime",
"typeVersion": 2,
"position": [1450, 300],
"connections": {
"main": [
[
{
"node": "k2l3m4n5o6p7",
"type": "main",
"index": 0
}
]
]
}
},
{
"parameters": {
"mode": "set",
"values": {
"string": [
{
"name": "summary",
"value": "订单 {{ $json.order_id }} 已收到!预计 {{ $json.friendly_delivery_date }} 送达,共需 {{ $json.delivery_days.day }} 天。"
}
]
}
},
"id": "k2l3m4n5o6p7",
"name": "生成订单摘要",
"type": "n8n-nodes-base.set",
"typeVersion": 3,
"position": [1650, 300]
}
],
"connections": {}
}[Manual Trigger]
↓
[初始化订单信息] → 设置订单日期、ID、产品名称
↓
[计算发货日期+2天] → 自动计算发货时间
↓
[计算收货日期+5天] → 基于发货日期计算收货时间
↓
[格式化订单日期] → 转换为 YYYY-MM-DD 格式
↓
[友好格式收货日期] → 转换为易读的格式(如 December 01 2025)
↓
[计算交付天数] → 计算订单到收货共需天数
↓
[生成订单摘要] → 输出最终结果{
"order_id": "ORD-20251201-001",
"product_name": "智能手环",
"amount": "299",
"order_date": "2025-12-01T12:24:00Z",
"expected_ship_date": "2025-12-03T12:24:00Z",
"expected_delivery_date": "2025-12-08T12:24:00Z",
"formatted_order_date": "2025-12-01",
"friendly_delivery_date": "December 08 2025",
"delivery_days": {
"day": 7
},
"summary": "订单 ORD-20251201-001 已收到!预计 December 08 2025 送达,共需 7 天。"
}你不需要总是添加Date & Time节点。在任何字段的表达式中,都可以直接使用日期函数:
// 获取当前日期
{{ $now }}
// 格式化当前日期
{{ $now.toFormat('yyyy-MM-dd') }}
// 计算7天后
{{ $now.plus({ days: 7 }) }}
// 计算3小时前
{{ $now.minus({ hours: 3 }) }}
// 提取年份
{{ $now.year }}如果你收到的日期格式不一致,可以在节点配置中使用**"From Date Format"**选项:
{
"operation": "formatDate",
"date": "{{ $json.user_provided_date }}",
"fromDateFormat": "dd/MM/yyyy",
"format": "YYYY-MM-DD",
"outputFieldName": "standardized_date"
}这样即使用户提供"01/12/2025"这样的格式,n8n也能正确识别。
在**"Get Current Date"**操作中,可以选择特定时区:
{
"operation": "getCurrentDate",
"timezone": "Asia/Shanghai",
"includeCurrentTime": true,
"outputFieldName": "shanghai_time"
}常用时区列表:
America/New_York - 纽约Europe/London - 伦敦Asia/Tokyo - 东京Asia/Shanghai - 上海Australia/Sydney - 悉尼症状:出现错误"Invalid DateTime"或"can't be converted to a dateTime"
原因:日期格式不被识别
解决方案:
症状:计算出的日期总是差几个小时
原因:没有正确设置时区
解决方案:
症状:加2天后不是预期的日期
原因:输入的日期格式有问题或没有包含时间信息
解决方案:
| 阶段 | 重点 | 操作 |
|---|---|---|
| 初级 | 了解基本概念 | Get Current Date、Format Date |
| 中级 | 灵活计算日期 | Add/Subtract from Date、Extract Part |
| 高级 | 复杂时间逻辑 | Get Time Between Dates、Round Date |
| 精通 | 在表达式中使用 | $now、时区转换、多操作链接 |
[1] 官方文档: https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.datetime/
[2] n8n系列教程: https://www.undsky.com/blog/?category=n8n%E6%95%99%E7%A8%8B#