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

