$dateAdd(日期加法)

最后更新:2026-10-09

$dateAdd(日期加法)

$dateAdd 在指定日期上增加一定数量的时间单位,返回新的日期,是聚合管道中计算相对日期(如到期日、续费日、截止时间)的首选操作符。unit 支持 year、month、week、day、hour、minute、second、millisecond 八种单位;amount 可为负数,等价于做减法。配合 timezone 可让计算基于指定时区的日历,处理跨月、跨年更准确。它可在 $project、$addFields、$set 等阶段使用,也可嵌套进其他表达式。

分类日期
MongoDB 版本5.0+
示例语言mongosh (Shell)

📝 语法

{ $dateAdd: { startDate: <日期表达式>, unit: <时间单位>, amount: <数值>, timezone: <时区> } }

⚙️ 参数

startDate要修改的日期,可为 Date、时间戳或可解析为日期的表达式。
unit时间单位:year、month、week、day、hour、minute、second、millisecond。
amount增加的数量,正数加、负数减;超出 64 位整数范围会报错。
timezone可选,计算基于的时区,支持 IANA 名(如 Asia/Shanghai)或 UTC 偏移。

返回值:增加后的新日期(BSON Date);startDate 为 null 或缺失时返回 null。

▶ 示例

请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):

// $dateAdd:订单创建 30 天后为到期日(按北京时间)
db.orders.aggregate([
  { $project: {
      dueDate: { $dateAdd: { startDate: '$createdAt', unit: 'day', amount: 30, timezone: 'Asia/Shanghai' } }
  } }
])

运行结果:

{ "_id": 1, "dueDate": ISODate("2026-10-25T00:00:00Z") }
{ "_id": 2, "dueDate": ISODate("2026-11-15T00:00:00Z") }

📌 注意事项

更多实战案例即将上线,敬请期待。

📚 相关教程

❓ 常见问题

Q$dateAdd 一次能加几个单位?
A一次只能指定一个单位;需要多种单位时嵌套调用,或分多次 $dateAdd。
Qamount 支持负数吗?
A支持,负数等价于做减法,也可改用 $dateSubtract。
Q时区怎么指定?
A用 Asia/Shanghai 这类 IANA 名或 +08:00 偏移,缺省为 UTC。
Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏