JavaScript中解析特殊日期字符串的方法求助
解决
Fri Nov 10 05:45:36 +0000 2017格式日期解析问题 嘿,这个问题我之前也碰到过!你说的这个日期格式其实是Twitter这类平台常用的标准格式,之所以moment和chrono-node没搞定,大概率是没给moment指定正确的解析模板,或者chrono-node对这种带明确时区偏移的格式默认支持不足。下面给你几个亲测有效的解决方案:
方案一:用Moment.js精准匹配格式
你之前可能直接调用moment(dateStr)尝试自动解析,但moment默认不会自动识别这种特定格式,需要手动指定匹配的模板(注意格式符的大小写要严格对应):
const dateStr = 'Fri Nov 10 05:45:36 +0000 2017'; // 按照日期字符串的结构指定解析模板 const parsedMoment = moment(dateStr, 'ddd MMM DD HH:mm:ss ZZ YYYY'); // 转成UTC时间对象 const utcDate = parsedMoment.utc(); // 如果需要原生Date对象,直接调用: const nativeUtcDate = utcDate.toDate();
模板各部分对应说明:
ddd:缩写星期几(如Fri)MMM:缩写月份(如Nov)DD:两位日期(如10)HH:mm:ss:24小时制时分秒ZZ:时区偏移(如+0000)YYYY:四位年份(如2017)
方案二:原生JavaScript直接解析(零依赖)
其实这个格式完全符合ECMAScript标准,原生Date构造函数可以直接解析,不需要额外安装库:
const dateStr = 'Fri Nov 10 05:45:36 +0000 2017'; const utcDate = new Date(dateStr); // 验证一下:输出UTC格式字符串 console.log(utcDate.toUTCString()); // 会返回 "Fri, 10 Nov 2017 05:45:36 GMT"
这个方法简单直接,解析出来的Date对象本身就对应UTC时间,非常省心。
方案三:chrono-node的兼容处理(可选)
如果你一定要用chrono-node,可以尝试指定时区选项来强制解析为UTC:
const chrono = require('chrono-node'); const dateStr = 'Fri Nov 10 05:45:36 +0000 2017'; const utcDate = chrono.parseDate(dateStr, { timezone: 'UTC' });
不过这个方案的稳定性不如前两个,优先推荐方案一或方案二。
内容的提问来源于stack exchange,提问作者user2001702
相关产品推荐
相关产品推荐

