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

JavaScript中解析带时区的任意格式日期方案咨询

解析网页爬取的非标准日期:更简洁的替代方案

你遇到的这类非标准日期解析需求,完全不用自己维护复杂的正则表达式和重构逻辑,现有成熟的日期解析库就能覆盖所有场景,代码更简洁、可靠性更高。

推荐方案:使用chrono-node库

chrono-node专门针对自然语言、非标准格式的日期时间解析优化,能直接处理你列出的所有异常格式,包括相对时间(如3 hours ago)、带序数后缀的日期(如Apr 21st 2023)、时间日期顺序颠倒、时区缩写、不规范的分隔符等场景。

示例代码

const chrono = require('chrono-node');

// 测试你列出的所有异常日期格式
const testDates = [
  'Apr 21, 2023,06:51 pm EDT',
  'Apr 21, 2023 06:51pm EDT',
  'Apr 21, 2023 06:51 p.m EDT',
  'Apr 21, 2023 06.51 pm EDT',
  'Apr 21, 2023 06:51 pm ET',
  '06:51 pm Apr 21, 2023 EDT',
  'Apr 21st 2023 EDT',
  '7th Feb 2023',
  '3 hours ago',
  '10m ago',
  'Thursday 10:30PM EST'
];

testDates.forEach(dateStr => {
  const result = chrono.parseDate(dateStr);
  console.log(`原字符串: "${dateStr}"`);
  console.log(`解析结果: ${result ? result.toISOString() : '解析失败'}\n`);
});

这段代码能直接输出所有测试用例的正确解析结果,无需手动拆分日期、时间、时区再重构,代码量比你当前的实现减少90%以上。

其他可选库

如果需要更灵活的自定义格式控制,也可以选择:

  • date-fns + date-fns-tz:通过parse函数配合自定义格式字符串处理非标准格式,date-fns-tz处理时区转换;
  • Luxon:DateTime.fromFormat和DateTime.fromISO组合,支持丰富的格式和时区处理,同时能解析部分自然语言日期。

为什么不推荐手写正则

你当前的实现需要维护两个复杂正则,还要处理各种边界情况(如两位数年份补全、时区缩写转换、相对时间计算),不仅代码冗余,还容易遗漏边缘场景(比如你未解决的Thursday 10:30PM EST,chrono-node能直接解析)。成熟库经过大量测试,覆盖更多异常格式,后续维护成本极低。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 21:47:50