2014-10-15 3 views
1

Я пытаюсь построить график рассеяния, используя highcharts. Я правильно даю даты и значение. Странная вещь заключается в том, что можно сказать, что график должен быть от 5 августа до 25 октября, но он отображает данные на 5-м SEP до 25-го ноября. Он прыгает целый месяц.Highcharts jumping целый месяц

Вот мой код.

var generate_scatter = function(data) { 
    var range = [] 
    for (a in data['response']){ 
     receive_date = a.split("-"); 
     temp = [Date.UTC(parseInt(receive_date[0]), parseInt(receive_date[1]), parseInt(receive_date[2])),data['response'][a]]; 
     range.push(temp); 
    } 
    $('#container').highcharts({ 
     chart: { 
      type: 'scatter', 
      zoomType: 'xy' 
     }, 
     title: { 
      text: 'Number of packages received in the warehouse against time.' 
     }, 
     subtitle: { 
      text: 'Source: MENAERP Database' 
     }, 
     xAxis: { 
      type: 'datetime', 
      dateTimeLabelFormats: { // don't display the dummy year 
       month: '%e. %b', 
       year: '%b' 
      }, 
      title: { 
       text: 'Date' 
      }, 
      startOnTick: true, 
      endOnTick: true, 
      showLastLabel: true 
     }, 
     yAxis: { 
      title: { 
       enabled: true, 
       text: 'Number of packages received in warehouse' 
      } 

     }, 
     legend: { 
      layout: 'vertical', 
      align: 'left', 
      verticalAlign: 'top', 
      x: 100, 
      y: 70, 
      floating: true, 
      backgroundColor: (Highcharts.theme && Highcharts.theme.legendBackgroundColor) || '#FFFFFF', 
      borderWidth: 1 
     }, 
     plotOptions: { 
      scatter: { 
       marker: { 
        radius: 5, 
        states: { 
         hover: { 
          enabled: true, 
          lineColor: 'rgb(100,100,100)' 
         } 
        } 
       }, 
       states: { 
        hover: { 
         marker: { 
          enabled: false 
         } 
        } 
       }, 
       tooltip: { 
        headerFormat: '<b>{series.name}</b><br>', 
        pointFormat: '{point.x:%e. %b}: {point.y:.2f} Packages' 
       } 
      } 
     }, 
     series: [{ 
      name: 'Packages', 
      color: 'rgba(223, 83, 83, .5)', 
      data : range 
    }] 
    }); 

}; 

Я проверил все даты в данных, они верны.
Ошибка в консоли firebug.
Что не так?

P.S: Диапазон массивов выглядит так после итерации.

[[1411862400000,127],[1410393600000,162],[1412985600000,278],[1410912000000,147],[1410048000000,172],[1410825600000,177],[1414368000000,362],[1410220800000,180],[1411257600000,143],[1411171200000,324],[1411776000000,178],[1411689600000,210],[1412380800000,189],[1410739200000,8]] 

Если вы назовете его извне, это настоящие данные.

{'response' : {'2014-08-28': 127, '2014-08-11': 162, '2014-09-11': 278, '2014-08-17': 147, '2014-08-07': 172, '2014-08-16': 177, '2014-09-27': 362, '2014-08-09': 180, '2014-08-21': 143, '2014-08-20': 324, '2014-08-27': 178, '2014-08-26': 210, '2014-08-25': 148, '2014-09-30': 301, '2014-09-15': 289, '2014-09-14': 177, '2014-09-17': 257, '2014-09-16': 161, '2014-08-05': 198, '2014-09-10': 202, '2014-09-13': 308, '2014-08-06': 175, '2014-10-01': 219, '2014-10-02': 170, '2014-10-06': 390, '2014-10-07': 230, '2014-10-08': 308, '2014-10-09': 209, '2014-08-23': 206, '2014-09-06': 262, '2014-09-07': 257, '2014-08-18': 213, '2014-08-19': 252, '2014-09-02': 194, '2014-09-18': 261, '2014-09-20': 232, '2014-09-21': 214, '2014-09-22': 137, '2014-09-23': 219, '2014-09-24': 184, '2014-09-25': 167, '2014-09-08': 240, '2014-09-09': 349, '2014-09-28': 329, '2014-09-29': 216, '2014-08-10': 205, '2014-08-24': 154, '2014-08-30': 165, '2014-08-31': 263, '2014-08-14': 168, '2014-09-01': 219, '2014-08-12': 134, '2014-10-13': 38, '2014-10-12': 250, '2014-10-11': 305, '2014-08-13': 207, '2014-09-03': 251, '2014-09-04': 189, '2014-08-15': 8}} 
+0

Вы можете добавить данные диапазона, как данные выборки только для тестирования? –

+0

Можете ли вы вставить его в скрипке с правильными данными? – void

+0

@RaunakKathuria Обновлен вопрос. –

ответ

0

Кажется, что в UTC месяцев начинается с 0. Таким образом, эта маленькая хитрость решает проблему:

temp = [Date.UTC(parseInt(receive_date[0]), parseInt(receive_date[1])-1,parseInt(receive_date[2])),data['response'][a]]; 

Вот документация о Date.UTC

+1

Вот и все. Я знал, что делаю какую-то глупую ошибку: p Спасибо. –

+0

Не волнуйся. Если у вас снова возникли проблемы с конверсиями UTC, вы можете проверить ошибки здесь: [link] (http://www.epochconverter.com/) –

0

Проблема с преобразуемого диапазона

[[1411862400000,127],[1410393600000,162],[1412985600000,278],[1410912000000,147],[1410048000000,172],[1410825600000,177],[1414368000000,362],[1410220800000,180],[1411257600000,143],[1411171200000,324],[1411776000000,178],[1411689600000,210],[1412380800000,189],[1410739200000,8]] 

Первая дата 1411862400000var date = new Date(1411862400000) // outputs 2014-09-28T00:00:00.000Z соответствует сентябрю, а не августу.

Посмотрите на скрипке http://jsfiddle.net/7nd61b9y/

Проверьте чек Date.UTC как сказал А-Tomy-к

Смежные вопросы