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

What is a good way to convert %H:%M:%S strings to timespan?

我有一个数据集,其中大部分数据点采用 H:M:S 格式,例如 20:59:59,显示了各个运动员在不同圈中使用的时间跨度。

对于 D3.js,将其转换为时间跨度(即秒数)的最佳方法是什么?

我试过了parser = d3.timeParse("%H:%M:%S");但是好像很不对..

您可以使用 d3.time.format("%H:%M:%S") 进行转化。

如果您使用的是 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() 方法,该方法 returns 自 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];