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

MongoDB聚合将+05:30偏移纪元时间戳转为yyyy mm dd hh mm ss格式

MongoDB聚合实现纪元时间转+05:30时区指定格式日期

实现逻辑对齐说明

完全匹配现有前端moment.js的转换规则:

  1. 秒级纪元时间戳乘1000转为毫秒级时间戳
  2. 应用+05:30时区偏移
  3. 输出YYYY-MM-DD hh:mm:ss A格式的时间字符串

可直接复用的聚合管道代码

MongoDB 4.0及以上版本原生支持日期格式化的时区参数,直接在$project阶段用$dateToString操作符实现即可:

// 替换your_collection为实际集合名
db.your_collection.aggregate([
  // 此处可插入业务需要的$match、$unwind、$sort等其他聚合阶段
  {
    $project: {
      // 其他需要返回的字段按业务需求添加即可
      displayTime: {
        $dateToString: {
          // 秒级时间戳转MongoDB标准Date对象
          date: { $toDate: { $multiply: ["$timeStamp", 1000] } },
          // 指定+05:30时区偏移,和moment.utcOffset("+05:30")逻辑一致
          timezone: "+05:30",
          // 格式符完全匹配输出要求
          format: "%Y-%m-%d %I:%M:%S %p"
        }
      }
    }
  }
])

格式符对应关系(避免写错)

MongoDB日期格式符和moment.js的写法有区别,对应关系如下:

  • %Y:4位年份,对应moment的YYYY
  • %m:2位补零月份,对应moment的MM
  • %d:2位补零日期,对应moment的DD
  • %I:12小时制2位补零小时,对应moment的hh
  • %M:2位补零分钟,对应moment的mm
  • %S:2位补零秒数,对应moment的ss
  • %p:大写AM/PM标识,对应moment的A

效果验证

用给出的示例纪元时间1563557673测试,上述聚合代码输出结果为2019-07-20 02:24:33 PM,和前端moment转换结果完全一致。

低版本兼容方案

如果使用的MongoDB版本低于4.0,不支持$dateToString的timezone参数,可以手动计算+05:30对应的毫秒偏移量(5.5小时=19800000毫秒),直接加到时间戳上再格式化:

displayTime: {
  $dateToString: {
    date: { $toDate: { $add: [{ $multiply: ["$timeStamp", 1000] }, 19800000] } },
    format: "%Y-%m-%d %I:%M:%S %p"
  }
}

注意:手动加偏移的方式不会自动处理夏令时,如果业务涉及夏令时场景,优先升级到4.0及以上版本用原生timezone参数实现。


内容的提问来源于stack exchange,提问作者Ghanshyam Vekariya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 21:57:23