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

为何MongoDB生成的create_at时间与本地实际时间不一致,如何调整?

时间差异原因

MongoDB默认存储的createdAt字段为UTC标准时间,你返回结果里时间末尾的Z就是UTC时区的标识,你提到的本地创建时间2021-10-06 10:10pm是你所处时区的本地时间,二者的差值就是你所在时区和UTC时区的时差,数分钟内的偏差属于正常的请求、数据库写入延迟。

调整默认行为的方案

你可以根据业务场景选择以下两种方案:

  • 方案1:关闭默认时间戳,手动赋值创建时间
    如果你需要直接在数据库中存储对应时区的时间,可以先关闭Mongoose的自动时间戳配置,在创建文档时手动传入当前时间:
    首先修改Schema配置:

    const yourSchema = new mongoose.Schema({
      // 其余业务字段定义
      createdAt: Date
    }, {
      timestamps: false // 关闭默认的createdAt、updatedAt自动生成
    })
    

    写入文档时手动传值:

    await YourModel.create({
      ...其余业务字段,
      createdAt: new Date() // 也可传入你自行格式化后的时间字符串
    })
    
  • 方案2:保留UTC存储,返回数据时做时区转换
    该方案更适合跨时区业务场景,不会导致存储的时间数据混乱,仅在接口返回前将UTC时间转换为目标时区的格式即可,推荐用轻量时间库dayjs实现:

    const dayjs = require('dayjs')
    const utc = require('dayjs/plugin/utc')
    const timezone = require('dayjs/plugin/timezone')
    dayjs.extend(utc)
    dayjs.extend(timezone)
    
    // 示例:转换为东八区(北京时间)的12小时制格式
    const formatCreatedAt = dayjs(doc.createdAt).tz('Asia/Shanghai').format('YYYY-MM-DD hh:mma')
    // 输出结果匹配你提到的 2021-10-06 10:10pm 格式
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 08:36:04