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

如何将yyyy-MM-dd HH:mm aa格式的日期字符串转换为ISOString

错误原因

  • 你使用的yyyy-MM-dd HH:mm aa日期格式不属于ECMAScript标准规定的Date构造器可直接解析的格式,不同浏览器的兼容实现差异很大,很容易解析失败
  • 示例字符串2021-11-21 13:19 PM本身存在逻辑冲突:13点已经是24小时制的下午时间,叠加PM标识会进一步干扰解析逻辑

解决方案

方案1:手动拆分解析(兼容性最佳,适配12小时制+AM/PM场景)

如果你的输入字符串的小时为12小时制,需要结合AM/PM标识转换,推荐直接手动拆分字段生成Date实例:

function parseCustomDate(dateStr) {
  const [datePart, timePart, period] = dateStr.split(' ');
  const [year, month, day] = datePart.split('-').map(Number);
  let [hour, minute] = timePart.split(':').map(Number);
  
  // 12小时制转24小时制逻辑
  if (period.toUpperCase() === 'PM' && hour < 12) hour += 12;
  if (period.toUpperCase() === 'AM' && hour === 12) hour = 0;
  
  // 注意JS的月份是0基索引,需要减1
  return new Date(year, month - 1, day, hour, minute);
}

// 测试调用
const event = parseCustomDate('2021-11-21 13:19 PM');
console.log(event.toISOString());

方案2:清理冗余标识后解析(适配24小时制场景)

如果确认输入字符串的小时已经是24小时制,末尾的AM/PM属于冗余标识,直接清理后即可正常解析:

const rawDateStr = '2021-11-21 13:19 PM';
// 移除末尾的AM/PM标识
const cleanedDateStr = rawDateStr.replace(/\s*[AP]M$/i, '');
const event = new Date(cleanedDateStr);
console.log(event.toISOString());

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 22:45:06