我想使用d3 api将秒转换为H:M:S。 目前正在做:
var parseSeconds = d3.time.format("%S").parse;
var formatSeconds = d3.format("%H:%M:%S");
var s = 3661;
console.log( formatSeconds( parseSeconds(s) ) );
预期结果01:01:01
我知道Moments.js,但我想坚持使用d3。
请指教,
由于
答案 0 :(得分:3)
有两件事;第一个是d3期待一个日期对象而你正在传递一个数字;第二个是你需要使用时间格式器。这些问题给你意想不到的结果。
您可以完全避免使用库,只需编写一个简单的自定义函数。
或者,您可以将秒添加到方便的数据中,并使用您已发布的代码的修改版本。
var formatSeconds = d3.format("%H:%M:%S");
行应为:
var formatSeconds = d3.time.format("%H:%M:%S");
因此,使用第二种方法选择时间,例如2014年1月1日,并通过以下方式创建日期对象:
var d = new Date(2014, 4, 1);
然后通过以下方式解析Unix Epoch时间:
var u = +d;
(有关详细说明,请参阅d3 doc's page)
通过向u
添加毫秒数,以小时,分钟和秒为单位创建时间。例如。要添加3661秒,请尝试:
var newU = u + (3661*1000);
现在,使用以下命令将其转换回日期对象:
new Date(newU)
并传入你的(修改过的)函数:
formatSeconds(new Date(newU));
您显然可以遍历一系列日期,或者适合您的数据。
希望这有帮助。