You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB中$dateDiff取整问题:如何实现向下取整而非四舍五入?

MongoDB $dateDiff 实现向下取整(小时单位)

你当前使用的$dateDiff查询会对小时差值进行四舍五入,导致10:00到13:54的时间差返回4而非期望的3。要实现向下取整,有两种简洁的方案:

  • 方案一:通过分钟差值转换后取整
    先计算两个时间的分钟差值,再除以60得到小时数,最后用$floor向下取整:
{
  $floor: {
    $divide: [
      {
        $dateDiff: {
          startDate: '$updatedAt',
          endDate: new Date(),
          unit: "minute"
        }
      },
      60
    ]
  }
}

逻辑说明:先获取精准的分钟差(比如你的示例中是234分钟),除以60得到3.9,再通过$floor直接提取整数部分3。

  • 方案二:截断结束时间到小时后计算差值
    用$dateTrunc把当前时间(endDate)截断到小时级别(去除分钟、秒等细分部分),再和startDate计算小时差:
{
  $dateDiff: {
    startDate: '$updatedAt',
    endDate: { $dateTrunc: { date: new Date(), unit: "hour" } },
    unit: "hour"
  }
}

逻辑说明:你的示例中13:54会被截断为13:00,与10:00的小时差恰好为3,直接得到期望结果。

内容的提问来源于stack exchange,提问作者Yash Raj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 22:47:38