Mongoose日期字段总是设为午夜,如何保存正确时间?
解决Mongoose Date默认值为午夜时间的问题
首先确认你的Schema写法是否正确,正确的默认值配置应该是引用Date.now函数(而非立即执行),这样每次创建文档时才会取当前时间:
const yourSchema = new Schema({ date: { type: Date, default: Date.now } });
如果写法正确但保存后仍显示午夜UTC时间,按以下步骤排查:
- 检查文档创建逻辑:确认你没有在创建文档时手动给
date字段赋值为当天起始时间(比如new Date().setHours(0, 0, 0, 0)),如果存在手动赋值,移除后让默认值自动生效。 - 时区转换问题:MongoDB存储的是UTC标准时间,你看到的
2023-06-01T00:00:00.000+00:00是UTC时间,转换为本地时区(例如东八区会是2023-06-01T08:00:00.000+08:00)才是实际的当前时间。查询后可以用date.toLocaleString()或date.toLocaleDateString()方法转换为本地时间显示。 - 自动维护时间戳:如果需要在创建和更新文档时都自动记录当前时间,推荐使用Mongoose的
timestamps选项,它会自动生成createdAt和updatedAt字段,无需手动配置默认值:
const yourSchema = new Schema({ // 你的其他字段定义 }, { timestamps: true });
内容的提问来源于stack exchange,提问作者Semion Vino
相关产品推荐
相关产品推荐

