我有一个列为毫秒,我希望在Google Charts图表中使用该列来表示持续时间。如何将该数字转换为时间跨度?
答案 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 page对type
的说明。
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
已解决此问题。