如何在Google Charts中使用几倍的时间跨度?

时间:2014-05-27 12:54:26

标签: javascript google-visualization timespan timeofday

我有一个列为毫秒,我希望在Google Charts图表中使用该列来表示持续时间。如何将该数字转换为时间跨度?

3 个答案:

答案 0 :(得分:2)

要扩展Kenny的答案,如果您输入的数据为毫秒,则可以使用DataView将其转换为timeofday数据类型:

var timeFormatter = new google.visualization.DateFormat('HH:mm:ss.SSS'); // set this pattern however you need to format your time display
var view = new google.visualization.DataView(data);
view.setColumns([/* columns before timeofday */, {
    type: 'timeofday',
    label: 'Time of Day',
    calc: function (dt, row) {
        var timeOfDay = toTimeSpan(data.getValue(row, /* time column index */);
        var formattedTime = timeFormatter.formatValue(timeOfDay);
        return {v: timeOfDay, f: formattedTime};
    }
}, /* columns after timeofday */]);

答案 1 :(得分:1)

在Google地图中,可以使用timeofday类型表示时间跨度,这样您就可以添加两次并获得第三种,并使图表自动格式化正确。 timeofday实际上是一个包含四个元素的数组:小时,分钟,秒和(可选)毫秒。有关DataTable timeofday的{​​{1}}属性,请参阅this pagetype的说明。

cols的每个字段都必须在该类型的增量范围内;你不能将整个时间跨度转储到毫秒字段并将其称为一天,因为999以上的任何东西都是超出界限的。

您可以使用此功能将毫秒时间跨度转换为timeofday

timeofday

警告:我认为function toTimeSpan(milliseconds) { var timespan = [0, 0, Math.floor(milliseconds / 1000), milliseconds % 1000]; // Minutes if (timespan[2] >= 60) { timespan[1] = Math.floor(timespan[2] / 60); timespan[2] %= 60; // Hours if (timespan[1] >= 60) { timespan[0] = Math.floor(timespan[1] / 60); timespan[1] %= 60; } } return timespan; } 不允许你持续超过24小时的跨度。如果您需要该功能,则可能需要使用timeofday列并编写自己的格式。

答案 2 :(得分:1)

使用asgallant答案,从Kenny Dewhirst扩展了答案我最终做了一些非常相似的事情,但我没有使用toTimeStamp函数,而是使用了new Date(milliseconds)。以下代码使用lifecript。

   function millisToDate dt, row
      date = new Date(dt.getValue(row, 0))
      dateFormatter = new google.visualization.DateFormat({pattern: "EEEE d 'de' MMMM 'de' yyyy, H:mm"});
      {v: date, f: dateFormatter.formatValue date}

   view = new google.visualization.DataView data
     view.setColumns([/* columns before timeofday */, {
     type: 'datetime',
     calc: millisToDate
    },  /* columns after timeofday */])

注意:使用type: 'date'表示横轴未显示小时数,以防图表显示一天的数据。更改为datetime已解决此问题。