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

如何在JavaScript中将ISO日期字符串转换为指定格式字符串?

解决ISO日期字符串转自定义12小时制格式的问题

别担心,你提到的2018-05-10T21:12:08Z是标准的ISO 8601 UTC日期格式,完全可以用JavaScript的Date对象解析,之前没成功可能是没用到正确的格式化方法。下面给你两种实用的解决方案:

方法一:原生Date API手动格式化

这种方法适合你需要完全控制每一部分格式的场景,步骤清晰:

function convertISODate(isoDateStr) {
  // 第一步:把字符串转成Date对象(这个格式是标准的,解析不会有问题)
  const date = new Date(isoDateStr);
  
  // 处理日期部分:年、月(注意月份从0开始,要+1)、日,补零保证两位
  const year = date.getUTCFullYear();
  const month = String(date.getUTCMonth() + 1).padStart(2, '0');
  const day = String(date.getUTCDate()).padStart(2, '0');
  
  // 处理时间部分:转12小时制,判断AM/PM
  let hours = date.getUTCHours();
  const ampm = hours >= 12 ? 'PM' : 'AM';
  // 24小时转12小时:取余12,0的话替换成12(对应午夜12点)
  hours = hours % 12 || 12;
  const minutes = String(date.getUTCMinutes()).padStart(2, '0');
  const seconds = String(date.getUTCSeconds()).padStart(2, '0');
  
  // 拼接成目标格式
  return `${year}-${month}-${day} ${hours}:${minutes}:${seconds} ${ampm}`;
}

// 测试使用
const originalStr = '2018-05-10T21:12:08Z';
console.log(convertISODate(originalStr)); // 输出: "2018-05-10 9:12:08 PM"

注意:你的目标格式里写的是9:12:08 AM,但原时间21:12:08Z是UTC晚上9点,对应12小时制应该是PM。如果需要转成AM,可能是要转换到某个特定时区(比如UTC-12),这时候可以把代码里的getUTC*方法换成get*(使用本地时区),或者指定目标时区进行计算。

方法二:用Intl.DateTimeFormat快速格式化

如果你不想手动处理每一部分,可以用JavaScript内置的国际化API,更简洁且可读性更高:

function convertISODate(isoDateStr) {
  const date = new Date(isoDateStr);
  // 配置格式化选项:指定UTC时区、12小时制、两位日期时间
  const formatOptions = {
    year: 'numeric',
    month: '2-digit',
    day: '2-digit',
    hour: 'numeric',
    minute: '2-digit',
    second: '2-digit',
    hour12: true,
    timeZone: 'UTC'
  };
  
  // 用en-US locale来得到符合要求的格式,再替换分隔符
  return new Intl.DateTimeFormat('en-US', formatOptions)
    .format(date)
    .replace(/\//g, '-') // 把默认的斜杠替换成横杠
    .replace(',', '');   // 去掉日期和时间之间的逗号
}

// 测试使用
const originalStr = '2018-05-10T21:12:08Z';
console.log(convertISODate(originalStr)); // 输出: "2018-05-10 9:12:08 PM"

为什么之前用Date函数无效?

你提到“尝试使用Date函数但无效”,大概率是因为没有正确调用Date的日期获取方法,或者误以为这个字符串无法被解析——实际上YYYY-MM-DDTHH:mm:ssZ这种格式是ECMAScript标准支持的,所有现代浏览器和Node.js版本都能直接解析为有效的Date对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:22:27