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

如何将字符串"Apr 28 2022 12:00AM"转换为日期?解决Date.parse返回NaN的问题

解决Date.parse解析"Apr 28 2022 12:00AM"返回NaN的问题

嘿,我之前也碰到过Date.parse对这种格式不兼容的情况——这个方法的解析逻辑依赖JS引擎的实现,不同浏览器/环境对非标准日期格式的支持差异很大,所以才会返回NaN。给你几个可行的解决办法:

方法1:手动解析字符串(兼容性拉满)

自己拆分字符串的各个部分,用new Date()构造函数来创建日期对象,完全不依赖引擎的解析规则,稳得一批:

const dtstring = "Apr 28 2022 12:00AM";
// 拆分日期时间各部分
const [monthStr, dayStr, yearStr, timeStr] = dtstring.split(' ');

// 月份缩写转成数字(JS里月份是0-11)
const monthMap = {
  Jan: 0, Feb: 1, Mar: 2, Apr: 3, May: 4, Jun: 5,
  Jul: 6, Aug: 7, Sep: 8, Oct: 9, Nov: 10, Dec: 11
};
const month = monthMap[monthStr];

// 处理日期和年份
const day = parseInt(dayStr, 10);
const year = parseInt(yearStr, 10);

// 处理小时和AM/PM
const hourStr = timeStr.slice(0, -2);
const period = timeStr.slice(-2);
let hour = parseInt(hourStr, 10);

if (period === 'AM' && hour === 12) {
  hour = 0; // 12AM对应凌晨0点
} else if (period === 'PM' && hour !== 12) {
  hour += 12; // PM非12点的话加12转成24小时制
}

// 创建日期对象
const dt = new Date(year, month, day, hour);
console.log(dt); // 输出正确的Date实例
console.log(dt.getTime()); // 也能拿到对应的时间戳

方法2:调整字符串为标准可解析格式

如果不想写太多手动解析的代码,可以给原字符串加个小改动,改成Date.parse能稳定识别的格式:

const dtstring = "Apr 28 2022 12:00AM";
// 在年份前加个逗号,变成美式标准格式"Apr 28, 2022 12:00AM"
const formattedString = dtstring.replace(/(\d{4})/, ', $1');
const dt = Date.parse(formattedString);
console.log(dt); // 现在能正确返回时间戳了

大部分JS引擎对带逗号的美式日期格式支持都很好,这个小改动就能解决问题。

方法3:用第三方日期库(适合复杂场景)

如果你的项目经常要处理各种奇奇怪怪的日期格式,推荐用moment.js或者date-fns这类专业的日期库,它们的解析能力更强大且跨环境一致:

用moment.js的例子:

const dtstring = "Apr 28 2022 12:00AM";
// 指定解析格式,直接转成Date对象
const dt = moment(dtstring, 'MMM DD YYYY hh:mmA').toDate();
console.log(dt);

用date-fns的例子:

import { parse } from 'date-fns';
const dtstring = "Apr 28 2022 12:00AM";
// 传入格式模板解析
const dt = parse(dtstring, 'MMM dd yyyy hh:mmaa', new Date());
console.log(dt);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 20:32:37