d3 - 将整数格式化为24小时制的时间

时间:2016-09-19 16:25:36

标签: d3.js time formatting data-visualization

我已经看到了类似的其他问题,但我的情况有点独特。

我从模拟器中绘制点,该模拟器在24小时内每9秒收集一次数据。这将返回一个包含9600个值的数组。

目前,我通过将数组的索引转换为0到24之间的整数(通过将其乘以0.0025(9/60/60 == 0.0025))来显示整数。所以9600 * .0025 == 24。

但是,我希望能够显示半小时和四分之一小时,所以1:15 AM显示为1:15,下午3:30显示为15:30。

我该怎么做?

2 个答案:

答案 0 :(得分:2)

如果我理解正确,可能更容易在午夜设置基准日期,然后添加到它,以便您可以使用d3.time.format,以下某种形式。

var i = 4800
var date = new Date();
date.setHours(0,0,0,0); //set date to midnight

var format = d3.time.format("%H:%M %p") //format to Hour Minutes
date.setSeconds(date.getSeconds() + (9 * i)); //9*4800 for Noon

alert(format(date)) //Alerts 12 P.M.

然后对每个小时的小时使用刻度线格式,类似于下面的

d3.svg.axis()
    .scale(x)
    .orient("bottom")
    .ticks(d3.time.minutes, 15)
    .tickFormat(d3.time.format("%H:%M"));

答案 1 :(得分:0)

如果某人有一系列整数并且想要将它们用作显示刻度的小时,这里是v4的解决方案:

var yScale = d3.scaleLinear()
    .domain(timeExtent) // [6, 20] from 06:00 to 20:00
    .range([0, height - cellHeight]);

var yAxis = d3.axisLeft(yScale)
    .tickFormat(function (hour) {
        var now = new Date();
        now.setHours(hour, 0, 0, 0);
        return d3.timeFormat("%H:%M")(now);
    });