Next.js项目中如何从MongoDB的createdAt字段提取标准格式时间
从MongoDB的createdAt字段提取标准格式时间(Next.js环境)
方法1:手动拼接原生Date对象的时间字段
如果从MongoDB拿到的createdAt是Date对象(MongoDB默认的ISODate在Next.js中会被解析为Date类型),可以直接通过Date的内置方法提取各部分时间,拼接成你要的YYYY-MM-DD HH:mm:ss格式:
// 假设doc是查询返回的MongoDB文档 const createdAt = doc.createdAt; const formattedTime = `${createdAt.getFullYear()}-${String(createdAt.getMonth() + 1).padStart(2, '0')}-${String(createdAt.getDate()).padStart(2, '0')} ${String(createdAt.getHours()).padStart(2, '0')}:${String(createdAt.getMinutes()).padStart(2, '0')}:${String(createdAt.getSeconds()).padStart(2, '0')}`; // 输出示例:2023-08-17 22:30:02
方法2:用toLocaleString快速生成格式
嫌手动拼接麻烦的话,用toLocaleString搭配配置参数,再做简单替换就能得到目标格式:
const formattedTime = doc.createdAt.toLocaleString('zh-CN', { year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit', second: '2-digit', hour12: false // 强制使用24小时制 }).replace(/\//g, '-').replace(/, /g, ' '); // 替换斜杠为横杠、去掉逗号,最终得到YYYY-MM-DD HH:mm:ss
方法3:处理字符串类型的createdAt
如果你的createdAt存储的是字符串(比如存的时候转成了ISO字符串),先把它转成Date对象再用上面的方法:
// 示例MongoDB返回的字符串格式 const createdAtStr = "2023-08-17T22:30:02.000Z"; const createdAt = new Date(createdAtStr); // 之后用方法1或2格式化即可
关键注意点
- 月份
getMonth()返回的是0-11,必须加1才能得到实际月份 padStart(2, '0')用来保证单数字的月份、日期、时分秒自动补零(比如1月→01,8分→08)
内容的提问来源于stack exchange,提问作者Unnikrishnan KJ
相关产品推荐
相关产品推荐

