我的数据集包含H:M:S
格式的大多数数据点,例如20:59:59
,显示了不同圈数的各个运动员使用的时间跨度。
使用D3.js,将它转换为时间跨度的最佳方法是什么,即秒数?
我试过parser = d3.timeParse("%H:%M:%S");
,但似乎非常错误。
答案 0 :(得分:3)
如果您使用的是D3 3.x,那么您可以构建一个合适的解析器:
var parser=d3.time.format("%H:%M:%S");
或者如果您使用的是D3 4.x:
var parser=d3.timeParse("%H:%M:%S");
无论哪种方式,您都可以将数据点转换为JS Date对象,如下所示:
var t1 = parser.parse("20:59:59");
var t2 = parser.parse("21:02:13");
您可以通过减去,例如:
找出这两个时间实例之间的经过时间var elapsed = t2 - t1; /* Returns 134000 = 134 seconds */
elapsed
将是经过的毫秒数。
有效的原因是Date对象提供了一个valueOf()
方法,它返回自1970年1月1日以来经过的毫秒数。减去日期对象会自动调用valueOf()
并减去返回的值。
请注意,如果您要解析的时间字符串不包含日期部分,那么如果开始时间和结束时间不在同一天,您将遇到问题。
修改强>:
从评论中可以清楚地看出,您正在使用的时间已经是单圈持续时间,采用H:M:S格式,并且您希望将它们转换为秒。这不需要D3,这很容易:
var components = /^(\d+):(\d+):(\d+)$/.exec("20:59:59");
var elapsedSecs = components[1]*3600+components[2]*60+components[3];
答案 1 :(得分:0)
您可以使用d3.time.format("%H:%M:%S")
进行转化。