1

我正在使用敏锐分析.js和敏锐-dataviz.js框架。

当尝试按月查询和图表数据时,如果我的日期时间有时区偏移信息,则结果不会按预期划分。

这是我正在使用的 javascript:

var query1 = new Keen.Query('count', {
  event_collection: "accounts",
  interval: "monthly",
  timeframe: {
    end: (new Date(2017, 3, 1)).toISOString(),    // "2017-04-01T05:00:00.000Z"
    start: (new Date(2017, 0, 1)).toISOString(),  // "2017-01-01T05:00:00.000Z"
  },
  timezone: "US/Eastern"
});

var query2 = new Keen.Query('count', {
  event_collection: "accounts",
  interval: "monthly",
  timeframe: {
    end: '2017-04-01T00:00:00.000',
    start: '2017-01-01T00:00:00.000'
  },
  timezone: "US/Eastern"
});

window.onload=function(){
  var chart1 = new Dataviz()
    .el("#chart1")
    .title("query1 results")
    .height(100)
    .type("area")
    .prepare();

  client
    .run(query1)
    .then(function(res){
      chart1 
        .data(res)
        .render();
    })
    .catch(function(err){
      chart1
        .message(err.message);
    });

  var chart2 = new Dataviz()
    .el("#chart2")
    .title("query2 results")
    .height(100)
    .type("area")
    .prepare();

  client
    .run(query2)
    .then(function(res){
      chart2 
        .data(res)
        .render();
    })
    .catch(function(err){
      chart2
        .message(err.message);
    });
}

这是结果的屏幕截图。请注意,在 query1 中,一月被提及两次。

渲染图表

我相信它与响应有关,其中 query1 中的时区偏移在“end”属性的第一个间隔中丢失。我猜这种最初的数据丢失会产生级联效应。

响应日志

我想知道这是一个错误还是预期的结果。如果这是预期的,我应该对我的代码进行什么更改。谢谢。

4

1 回答 1

3

从查询 1 时间范围中删除 Z,它的行为类似于查询 2。建议您应该在查询上使用timezone它,因为它具有考虑夏令时的额外好处。当您将时区作为查询参数和时间戳偏移量都包含在内时,事情就会变得混乱。通常,时区参数会被覆盖以使用时间戳中指定的任何时区偏移量(在本例中为 Z/UTC)。

在您的第一个图表中显示多个月份与月份的分割方式有关。您有一个从 UTC 时间 1 月 1 日凌晨 5 点开始的部分月份,在您的浏览器中显示为“一月”,然后您有一个从 2 月 1 日开始的 UTC 完整月份,也显示为 1 月,因为它在您的本地时间仍然是 1 月。然后您从 3 月开始的月份显示为 2 月,因为它是当地时间的 2 月。

于 2017-07-12T23:11:37.400 回答