Flot - x轴刻度不符合实际数据

时间:2012-11-06 15:59:18

标签: jquery flot

我有以下问题,如下图所示,水平刻度似乎是随机的,不要尝试与数据对齐。我的数据和代码也在下面。对此有任何帮助表示赞赏。

图片位于http://imgur.com/VVrvi(抱歉无法附加图片)

代码:

    $.plot(placeholder,
            data, 
            {
               yaxes: [ { tickFormatter: centFormatter, max: 101, min: -0.1, tickSize: 20 }, { position: "right", min: -0, } ],
               xaxes: [ { mode: "time", minTickSize: [1, "day"],  } ],
               series: {
                   lines: { show: true },
                   points: { show: true }
               },
               grid: { hoverable: true, clickable: true },
    });

蓝线数据:

[2012-08-19] => 3612220
[2012-08-26] => 3570080
[2012-09-02] => 3576040
[2012-09-09] => 3597380
[2012-09-16] => 3593040
[2012-09-23] => 3579480
[2012-09-30] => 3638840
[2012-10-21] => 13

我已经为ticks,minTickSize等尝试了各种选项..没有运气。

1 个答案:

答案 0 :(得分:1)

问题是您的日期数据来自您服务器的时区,然后在浏览器中通过flot以UTC格式呈现。您需要仔细阅读documentation时间序列数据部分。

  

默认行为是Flot始终根据显示时间戳   世界标准时间。原因是核心Javascript Date对象没有   支持其他固定时区。通常,您的数据是在另一个时间   区域,所以可能需要一些调整来解决这个问题   限制。

想象一下,您的服务器的时区是UTC + 8小时。当您在服务器上为2012-08-19创建时间戳时,实际得到的是2012-08-19上午8点。解决此问题的最简单方法是生成UTC时间戳(可以使用多种语言编写,并在flot文档中给出示例)。如果这是不可能的,只需在生成的时间戳中添加正确的毫秒数,在我们的示例中,就像这样(在伪代码中):

myTz = new Date('2012-08-19').toTimestamp(); //this is 8am on the 19th in milliseconds
myTz = myTz - 8*60*60*1000; //this is 8 hours