【n8n教程】:Date & Time节点,搞定日期时间处理!

日期时间处理是工作流自动化中最常见的需求。本教程将带你从零开始,掌握n8n Date & Time节点的所有操作,让你的工作流在处理时间数据时游刃有余。

为什么需要学习Date & Time节点?

想象一下这些场景:

所有这些需求,Date & Time节点都能轻松搞定


Date & Time节点核心概念

什么是Date & Time节点?

Date & Time节点是n8n内置的时间处理专家。它提供7种不同的操作,让你能够:

时区很重要!

n8n的所有时间操作都依赖于时区设置。记住这个优先级:

  1. 1. 工作流自身的时区设置(最优先)
  2. 2. n8n实例的时区设置(默认为 America/New York)

💡 建议:在工作流设置中明确指定时区,避免时间混乱!


7大操作逐个击破

1️⃣ 获取当前日期(Get Current Date)

使用场景:你需要一个"起点"时间来进行其他计算

配置步骤

  1. 1. 添加Date & Time节点
  2. 2. 选择操作:Get Current Date
  3. 3. 选项1 - Include Current Time
    • • ✅ 打开 = 获取完整的日期和时间(例如:2025-12-01T12:24:00Z)
    • • ❌ 关闭 = 仅获取日期,时间设为午夜(例如:2025-12-01T00:00:00Z)
  4. 4. Output Field Name:给输出起个名字(例如:current_date

代码示例


    
    
    
  {
  "operation"
: "getCurrentDate",
  "includeCurrentTime"
: true,
  "outputFieldName"
: "now"
}

实际效果


    
    
    
  输入:(无)
输出:{ "now": "2025-12-01T12:24:00Z" }

2️⃣ 对日期进行加法运算(Add to a Date)

使用场景:设置提醒日期、计算截止日期等

配置步骤

  1. 1. Date to Add To:输入基础日期
  2. 2. Time Unit to Add:选择时间单位(年、月、周、天、小时、分钟、秒)
  3. 3. Duration:输入数字(例如:7表示加7个单位)
  4. 4. Output Field Name:输出字段名(例如: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(一周后的日期)

3️⃣ 从日期中提取部分(Extract Part of a Date)

使用场景:从完整日期中提取年份、月份、日期等

可提取的部分

代码示例


    
    
    
  {
  "operation"
: "extractDatePart",
  "date"
: "{{ $json.birth_date }}",
  "part"
: "year",
  "outputFieldName"
: "birth_year"
}

实际效果


    
    
    
  输入:birth_date = 1990-05-15T14:30:00Z
输出:birth_year = 1990

4️⃣ 日期格式转换(Format a Date)

使用场景:让日期显示成用户能看懂的格式

预设格式选项

格式示例输出使用场景
MM/DD/YYYY12/01/2025美国风格
YYYY/MM/DD2025/12/01标准排序
MMMM DD YYYYDecember 01 2025友好阅读
MM-DD-YYYY12-01-2025短横线分隔
YYYY-MM-DD2025-12-01ISO标准

自定义格式符号(使用Luxon标准):

符号含义示例
yyyy4位年份2025
MM2位月份01, 12
dd2位日期01, 31
HH2位小时(24h)00, 23
mm2位分钟00, 59
ss2位秒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

5️⃣ 计算时间差(Get Time Between Dates)

使用场景:计算项目还剩几天、员工工作多少年等

配置步骤

  1. 1. Start Date:开始日期(较早的日期)
  2. 2. End Date:结束日期(较晚的日期)
  3. 3. Units:选择计算单位(可多选!)
    • • Year(年)
    • • Month(月)
    • • Week(周)
    • • Day(天)
    • • Hour(小时)
    • • Minute(分钟)
    • • Second(秒)
  4. 4. Output as ISO String(可选):将结果格式化为ISO时间段格式

代码示例


    
    
    
  {
  "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格式输出示例


6️⃣ 日期四舍五入(Round a Date)

使用场景:简化日期,便于数据分组或统计

配置步骤

  1. 1. Date:要四舍五入的日期
  2. 2. Mode:选择方向
    • Round Down:向下舍入
    • Round Up:向上舍入
  3. 3. To Nearest:舍入到哪个单位(年、月、周、天、小时、分钟、秒)

代码示例


    
    
    
  {
  "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

7️⃣ 从日期中减法(Subtract From a Date)

使用场景:计算截止日期前多少天、生日前几周等

配置步骤

  1. 1. Date to Subtract From:基础日期
  2. 2. Time Unit to Subtract:时间单位
  3. 3. Duration:要减去的数字
  4. 4. Output Field Name:输出字段名

代码示例


    
    
    
  {
  "operation"
: "subtractFromDate",
  "dateToSubtractFrom"
: "{{ $json.deadline }}",
  "timeUnitToSubtract"
: "day",
  "duration"
: 3,
  "outputFieldName"
: "reminder_date"
}

实际效果


    
    
    
  输入:deadline = 2025-12-10
输出:reminder_date = 2025-12-07(3天前)

实战案例:构建一个完整的订单跟踪工作流

需求描述

创建一个工作流,当收到订单时:

  1. 1. ✅ 记录订单时间
  2. 2. ✅ 自动计算预计发货日期(订单日期 + 2天)
  3. 3. ✅ 计算预计收货日期(发货日期 + 5天)
  4. 4. ✅ 格式化日期以便展示
  5. 5. ✅ 计算订单距现在还有多少天

完整工作流JSON代码

将以下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 天。"
}

高级技巧

🎯 技巧1:在表达式中使用Date & Time

你不需要总是添加Date & Time节点。在任何字段的表达式中,都可以直接使用日期函数:


    
    
    
  // 获取当前日期
{{ $now }}

// 格式化当前日期

{{ $now.toFormat('yyyy-MM-dd') }}

// 计算7天后

{{ $now.plus({ days: 7 }) }}

// 计算3小时前

{{ $now.minus({ hours: 3 }) }}

// 提取年份

{{ $now.year }}

🎯 技巧2:处理不同的日期格式输入

如果你收到的日期格式不一致,可以在节点配置中使用**"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也能正确识别。

🎯 技巧3:时区转换

在**"Get Current Date"**操作中,可以选择特定时区:


    
    
    
  {
  "operation"
: "getCurrentDate",
  "timezone"
: "Asia/Shanghai",
  "includeCurrentTime"
: true,
  "outputFieldName"
: "shanghai_time"
}

常用时区列表:


常见错误排查

❌ 错误1:Invalid DateTime

症状:出现错误"Invalid DateTime"或"can't be converted to a dateTime"

原因:日期格式不被识别

解决方案

  1. 1. 使用Date & Time节点的**"From Date Format"**选项指定输入格式
  2. 2. 使用ISO标准格式(YYYY-MM-DD)
  3. 3. 在Set节点中确保转换正确

❌ 错误2:时区混乱

症状:计算出的日期总是差几个小时

原因:没有正确设置时区

解决方案

  1. 1. 在工作流设置中设置正确的时区
  2. 2. 在Date & Time节点中明确指定时区
  3. 3. 确保所有日期都使用UTC或同一时区

❌ 错误3:日期计算结果不对

症状:加2天后不是预期的日期

原因:输入的日期格式有问题或没有包含时间信息

解决方案

  1. 1. 在Set节点中预览数据,确认日期格式正确
  2. 2. 使用Format Date操作标准化日期格式
  3. 3. 使用代码调试功能检查中间结果

总结

阶段重点操作
初级了解基本概念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#