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
相关产品推荐
相关产品推荐

