2016-09-03 1 views
0

Я пытаюсь построить график с библиотекой c3.js с осью x в интервале времени.

Мы составляем этот интервал в соответствии с выбором даты. Итак, если мы выберем даты 2016-03-13 00:00 - 2016-03-13 04:00, то мы добавим 15 минут до даты начала, пока остается меньше или равна дате окончанияx-axis неправильно строит в c3.js, когда есть данные интервалов, которые находятся в времени DST

точка данных Я принимаю это следующим образом:

[ «х», «2016-03-13 00:00», «2016-03-13 00:15 «2016-03-13 00:30», «2016-03-13 00:45», «2016-03-13 01:00», «2016-03-13 01:15», «2016-03» -13 01:30 "," 2016-03-13 01:45 "," 2016-03-13 02:00 "," 2016-03-13 02:15 "," 2016-03-13 02:30 " , «2016-03-13 02:45», «2016-03-13 03:00», «2016-03-13 03:15», «2016-03-13 03:30», «2016-03- 13 03:45 "," 2016-03-13 04:00 "]

Эти пункты работают отлично, когда в часовом поясе не происходит DST. Но когда DST применим, точка между 2 утра и 3 утра отсутствует на графике из-за этого шкала составляет 23 часа. Нам нужна вся точка для рисования на графике независимо от того, где применим DST или нет. Следующий код, который мы используем, но он не работает

var chart = c3.generate({ 
    data: { 
     x: 'x', 
     xFormat: '%Y-%m-%d %H:%M', // 'xFormat' can be used as custom format of 'x' 
     columns: [ 
      ["x", "2016-03-13 00:00", "2016-03-13 00:15", "2016-03-13 00:30", "2016-03-13 00:45", "2016-03-13 01:00", "2016-03-13 01:15", "2016-03-13 01:30", "2016-03-13 01:45", "2016-03-13 02:00", "2016-03-13 02:15", "2016-03-13 02:30", "2016-03-13 02:45", "2016-03-13 03:00", "2016-03-13 03:15", "2016-03-13 03:30", "2016-03-13 03:45", "2016-03-13 04:00"],//   ['x', '20130101', '20130102', '20130103', '20130104', '20130105', '20130106'], 
      ['data1', 30, 200, 100, 400, 150, 250,30, 200, 100, 400, 150, 250.30, 200, 100, 400, 150] 
     ] 
    }, 
    axis: { 
     x: { 
      type: 'timeseries', 

      fit: true, 
      tick: { 
       format: '%Y-%m-%d %H:%M:%S' 
      } 
     } 
    } 
}); 

ответ

0

Попробуйте использовать дату строки с смещение часового пояса.

var dateFormatter=d3.time.format("%Y-%m-%d %H:%M%Z"); 
columns[0].forEach(function(d,idx,theArray){ 
    if(d!='x'){ 
     theArray[idx] = dateFormatter(new Date(d)); 
    } 
}); 
+0

'[«х»,«2016-03-13 00: 00- 0500 "," 2016-03-13 00: 15-0500 "," 2016-03-13 00: 30-0500 "," 2016-03-13 00: 45-0500 "," 2016-03-13 01: 00-0500 "," 2016-03-13 01: 15-0500 "," 2016-03-13 01: 30-0500 "," 2016-03-13 01: 45-0500 "," 2016-03-13 03: 00-0400 "," 2016-03-13 03: 15-0400 "," 2016-03 -13 03: 30-0400 "," 2016-03-13 03: 45-0400 "," 2016-03-13 03: 00-0400 "," 2016-03-13 03: 15-0400 "," 2016 -03-13 03: 30-0400 "," 2016-03-13 03: 45-0400 "," 2016-03-13 04: 00-0400 "]' Я получаю этот массив с указанным выше патчем. Здесь 3 часа интервал повторяется дважды, но нам нужен интервал 2 часа. –

1

Там есть несколько параметров, которые переключаются между локальным и У, один для данных и один для оси, хотя один данные официально не подвергаются и должен быть сделано через внутреннее свойство С3

c3.chart.internal.fn.additionalConfig.data_xLocaltime = false; 

var chart = c3.generate({ 
    data: { 
     x: 'x', 
     xFormat: '%Y-%m-%d %H:%M', // 'xFormat' can be used as custom format of 'x' 
     columns: [ 
      ["x", "2016-03-13 00:00", "2016-03-13 00:15", "2016-03-13 00:30", "2016-03-13 00:45", "2016-03-13 01:00", "2016-03-13 01:15", "2016-03-13 01:30", "2016-03-13 01:45", "2016-03-13 02:00", "2016-03-13 02:15", "2016-03-13 02:30", "2016-03-13 02:45", "2016-03-13 03:00", "2016-03-13 03:15", "2016-03-13 03:30", "2016-03-13 03:45", "2016-03-13 04:00"], 
      /*["x", "2016-03-27 00:00", "2016-03-27 00:15", "2016-03-27 00:30", "2016-03-27 00:45", "2016-03-27 01:00", "2016-03-27 01:15", "2016-03-27 01:30", "2016-03-27 01:45", "2016-03-27 02:00", "2016-03-27 02:15", "2016-03-27 02:30", "2016-03-27 02:45", "2016-03-27 03:00", "2016-03-27 03:15", "2016-03-27 03:30", "2016-03-27 03:45", "2016-03-27 04:00"],*/ 
      ['data1', 30, 200, 100, 400, 150, 250,30, 200, 100, 400, 150, 250.30, 200, 100, 400, 150] 
     ] 
    }, 
    axis: { 
     x: { 
      type: 'timeseries', 

      fit: true, 
      tick: { 
       format: '%Y-%m-%d %H:%M:%S' 
      }, 
      localtime: false, 
     } 
    } 
}); 

(данные 2016-03-27 Я использовал для тестирования в локали ик, как это, когда изменение дневного света час здесь происходит)

+0

Большое спасибо за публикацию этого. Я вытягивал свои волосы, пытаясь понять, как заставить C3 анализировать даты в данных как UTC. –

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