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

如何将MongoDB中Date.now返回的ISO字符串转换为yyyy-MM-dd hh:mm:ss格式UTC字符串

解决方案

方案1:原生JavaScript实现(无第三方依赖)

直接对Date对象调用UTC相关方法拼接即可,不需要引入额外依赖:

function formatUTCDate(isoDateStr) {
  const date = new Date(isoDateStr);
  // 小于10的数字自动补前导零
  const pad = (num) => num.toString().padStart(2, '0');
  const year = date.getUTCFullYear();
  const month = pad(date.getUTCMonth() + 1);
  const day = pad(date.getUTCDate());
  const hours = pad(date.getUTCHours());
  const minutes = pad(date.getUTCMinutes());
  const seconds = pad(date.getUTCSeconds());
  return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
}

// 测试用例
console.log(formatUTCDate('2021-08-30T03:30:54.446Z')); 
// 输出结果:2021-08-30 03:30:54

注意必须使用带UTC后缀的日期方法,不要使用普通的getFullYear、getMonth这类方法,后者会读取本地时区的时间,不符合你要求UTC时间的需求。

方案2:使用第三方日期库简化代码

如果项目中已经引入了日期处理库,可以直接调用内置格式化能力,指定UTC时区即可:

dayjs 实现(需要先引入utc插件)

import dayjs from 'dayjs';
import utc from 'dayjs/plugin/utc';
dayjs.extend(utc);

const formattedDate = dayjs('2021-08-30T03:30:54.446Z').utc().format('YYYY-MM-DD HH:mm:ss');

moment.js 实现

const formattedDate = moment.utc('2021-08-30T03:30:54.446Z').format('YYYY-MM-DD HH:mm:ss');

方案3:Mongoose查询时自动格式化

如果你是从MongoDB查询数据,可通过Mongoose虚拟属性配置,查询返回文档时自动生成格式化后的日期,不需要每次手动转换:

// 在CommentModel定义处添加虚拟属性
CommentModel.virtual('formattedDate').get(function() {
  const date = this.date;
  const pad = num => num.toString().padStart(2, '0');
  return `${date.getUTCFullYear()}-${pad(date.getUTCMonth()+1)}-${pad(date.getUTCDate())} ${pad(date.getUTCHours())}:${pad(date.getUTCMinutes())}:${pad(date.getUTCSeconds())}`;
});

// 查询时开启虚拟字段返回即可
CommentModel.find().lean({ virtuals: true });

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 17:51:02