JavaScript中如何将'20220722T141444Z'字符串转换为Date对象
JavaScript 实现
YYYYMMDDTHHMMSSZ 格式字符串转Date对象方案 你给出的'20220722T141444Z'是无分隔符的ISO 8601标准UTC时间格式,JavaScript可以通过以下两种方式实现转换,不需要依赖特定解析库:
方案1:原生手动解析(全环境兼容,推荐)
该方法零依赖、所有JS运行环境都支持,不会出现引擎解析差异问题。核心逻辑是按固定位拆分字符串的年、月、日、时、分、秒字段,通过Date.UTC构造UTC时间(匹配字符串末尾Z代表的UTC时区):
注意:JavaScript中Date对象的月份是从0开始计数(0代表1月,11代表12月),解析到的月份值需要减1。
function parseISOBasicFormat(dateStr) { // 基础格式校验 if (!/^\d{8}T\d{6}Z$/.test(dateStr)) { throw new Error('日期格式不符合要求,需为YYYYMMDDTHHMMSSZ格式'); } return new Date(Date.UTC( +dateStr.slice(0, 4), // 年 +dateStr.slice(4, 6) - 1,// 月(0起始,需减1) +dateStr.slice(6, 8), // 日 +dateStr.slice(9, 11), // 时 +dateStr.slice(11, 13), // 分 +dateStr.slice(13, 15) // 秒 )); } // 调用测试 const myDate = parseISOBasicFormat('20220722T141444Z'); console.log(myDate.toISOString()); // 输出:2022-07-22T14:14:44.000Z,和原始时间完全一致
方案2:借助第三方日期库解析
如果项目中已经引入了通用日期处理库,可以直接用库的自定义格式解析能力,不需要自己写拆分逻辑:
- 以轻量库
dayjs为例,需要搭配自定义格式解析、UTC两个插件:
import dayjs from 'dayjs'; import customParseFormat from 'dayjs/plugin/customParseFormat'; import utc from 'dayjs/plugin/utc'; dayjs.extend(customParseFormat); dayjs.extend(utc); // 按指定格式解析为UTC时间,再转原生Date对象 const myDate = dayjs.utc('20220722T141444Z', 'YYYYMMDDTHHmmssZ').toDate();
注意事项
不要直接使用new Date('20220722T141444Z')尝试解析:该紧凑格式不属于ECMAScript标准要求Date构造函数必须支持的格式,部分低版本浏览器、JS运行环境会出现解析失败、返回Invalid Date的问题。
内容的提问来源于stack exchange,提问作者OrLevi
相关产品推荐
相关产品推荐

