d3.timeParse解析UTC时间字符串转Date对象返回null如何解决
问题原因
- 解析格式规则与待解析字符串结构不匹配:自定义的解析规则
%Y-%m-%d %H:%M:%S.%LZ中,日期和时间段的分隔符设置为空格,但实际UTC时间字符串里日期和时间是用大写字符T分隔的,位置匹配失败直接导致解析返回null。 - 小数秒位数匹配错误:格式规则中的
%L指令仅能匹配3位长度的毫秒值,你提供的时间字符串里秒后的小数部分共7位(1620000),长度不匹配也会造成解析异常。
修复方案
你可以任选以下一种方式实现正确解析:
- 方案1:直接使用d3内置的ISO 8601标准时间解析器,无需手动编写格式规则,天然适配你提供的标准UTC时间字符串,代码最简洁:
// 引入d3库后直接调用内置解析方法 var t1 = d3.isoParse("2022-06-20T19:00:00.1620000Z") console.log("debug:", t1) // 输出正确的Date对象
- 方案2:修正自定义解析规则,适配字符串格式:首先将格式串中日期和时间之间的空格替换为
T,同时对原始字符串做预处理,将7位小数秒截断为3位毫秒值,再传入解析函数即可:
// 预处理:截断多余的小数秒精度,保留3位毫秒 const formatTimeStr = "2022-06-20T19:00:00.1620000Z".replace(/\.(\d{3})\d+Z$/, ".$1Z") var t1 = d3.timeParse("%Y-%m-%dT%H:%M:%S.%LZ")(formatTimeStr) console.log("debug:", t1)
内容的提问来源于stack exchange,提问作者lucky1928
相关产品推荐
相关产品推荐

