将%H:%M:%S字符串转换为时间跨度的好方法是什么?

时间:2017-03-22 00:34:59

标签: javascript d3.js timespan

我的数据集包含H:M:S格式的大多数数据点,例如20:59:59,显示了不同圈数的各个运动员使用的时间跨度。

使用D3.js,将它转换为时间跨度的最佳方法是什么,即秒数?

我试过parser = d3.timeParse("%H:%M:%S");,但似乎非常错误。

2 个答案:

答案 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")进行转化。