问题描述
|
在图形中显示xaxis标签时,Flot插件存在一些问题。他们是
\'mode: \"time\"\'
。当前,我将Flot与工具提示功能一起使用,并且工具提示包含日期和时间。
我向包含时间戳的插件提供JSON。之后,我将转换时间戳并将其显示在工具提示中。问题在于,在图形中显示数据时,由于时区之间的差异,工具提示中的时间与插件生成的xaxis标签不对应。我的JSON时间戳为+2 GMT,但Flot中的xaxis标签为+0 GMT。所以我想知道是否有可能设置时区或类似的偏移量。
我的JSON(由AJAX生成)
[1300087800000,29],[1300088700000,39],[1300089600000,46],[1300090500000,53],[1300091400000,68],[1300092300000,95],...
我的工具提示功能
$(placeholder).bind(\"plothover\",function (event,pos,item) {
$(\"#tooltip\").remove();
var x = item.datapoint[0].toFixed(2);
var y = item.datapoint[1].toFixed(2);
var currDate = new Date(Math.floor(x));
var hour = currDate.getHours();
var minute = String(\"\") + currDate.getMinutes();
var tooltip = hour + \":\" +
((minute.length < 2) ? \"0\" + minute : minute) + \" \" +
(Math.round(y * 100)/100) + \"Wh\"
showTooltip(item.pageX,item.pageY,tooltip);
});
浮选选项
var plotOptions = {
lines: { show: true,linewidth: 1 },points: { show: false,symbol: \"cross\" },xaxis: {
mode: \"time\",tickLength: 5,timeZoneOffset: (new Date()).getTimezoneOffset()
},selection: { mode: \"x\",color: \"#BCBCBC\" },grid: { hoverable: true,clickable: false }
};
但是不幸的是timeZoneOffset
不起作用,而且xaxis和工具提示之间仍然存在差异。
您有什么想法应该解决我的问题吗?
解决方法
您可以尝试使用时区而不是timeZoneOffset。您的选择如下所示:
var plotOptions = {
lines: { show: true,lineWidth: 1 },points: { show: false,symbol: \"cross\" },xaxis: {
mode: \"time\",tickLength: 5,timezone: \"browser\" // \"browser\" for local to the client or timezone for timezone-js
},selection: { mode: \"x\",color: \"#BCBCBC\" },grid: { hoverable: true,clickable: false }
};
我的flot版本是0.7
,如果查看flot问题数据库,则问题141会涉及时区。提示您使用的语法的问题484已合并到此问题中。
该文件说:
通常,您希望根据
特定时区,通常是数据所在的时区
生产的。但是,Flot始终根据UTC显示时间戳。
作为核心Java脚本的唯一替代方法是解释
根据访问者所在时区的时间戳,
这意味着滴答声将随时区发生不可预测的变化
以及每个访客的夏令时。
因此,鉴于在以下地区对自定义时区没有很好的支持
使用Javascript,您必须照顾好这个服务器端。
因此,正确的解决方案是使您的数据看起来像UTC服务器端(即使不是)。如果您无法更改数据源,则可能需要考虑代理它。服务器端语言应允许时区操作。
或者,按照问题141进行操作,并注意修补程序或插件。
,对于UTC时间戳记,请使用UTC时间函数:
var hour = currDate.getUTCHours(); // instead of getHours()
var minute = String(\"\") + currDate.getUTCMinutes(); // instead of getMinutes()
并删除xaxis时区。