如何将'20211114025320+0000'格式字符串转换为JS Date对象
JS紧凑时间格式转Date对象问题解答
结论
不需要编写复杂的自定义转换函数。原生JS的Date构造器本身支持解析标准ISO 8601格式的时间字符串,但无法直接识别YYYYMMDDHHmmss+0000这种无分隔符的紧凑格式,所以只需要做非常简单的字符串预处理即可,整体实现成本极低。
可用实现方案
方案1:按位置截取拼接(兼容性最好,可读性高)
直接根据固定格式截取各时间片段,拼接成Date可直接识别的标准ISO格式即可:
function compactStrToDate(compactStr) { const y = compactStr.slice(0, 4) const m = compactStr.slice(4, 6) const d = compactStr.slice(6, 8) const h = compactStr.slice(8, 10) const min = compactStr.slice(10, 12) const s = compactStr.slice(12, 14) return new Date(`${y}-${m}-${d}T${h}:${min}:${s}.000Z`) } // 测试 const targetDate = compactStrToDate('20211114025320+0000') console.log(targetDate.toISOString()) // 输出 2021-11-14T02:53:20.000Z
方案2:正则替换(代码更简洁)
如果不需要特别高的可读性,用正则替换一步就能完成预处理:
const compactStr = '20211114025320+0000' const targetDate = new Date(compactStr.replace(/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2}).*/, '$1-$2-$3T$4:$5:$6.000Z')) console.log(targetDate.toISOString()) // 输出结果符合要求
注意事项
- 不要直接把原始紧凑格式字符串传给
Date构造器,不同浏览器的非标准解析逻辑不同,会出现兼容性问题。 - 如果你的输入字符串时区不固定为+0000,只需要额外截取最后的时区字段拼接进去即可。
内容的提问来源于stack exchange,提问作者g---
相关产品推荐
相关产品推荐

