Как обрабатывать CSV-данные (дата / время) месяц, неделя, день, час в верхних чартах - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть файл CSV в следующем формате:

<pre id="csv" style="display:none">
DATES,WHOLESALE,ECOMMERCE,RETAIL,LOANS,BONDISSUER
01/10/2018 00:00,25,16,13,1,0
01/10/2018 01:00,24,5,9,3,2
01/10/2018 02:00,28,6,17,0,6

Диапазон данных: 01/10/2018 00:00 - 31/10/2018 00:00 Интервал - каждый час.Я использую высокопоставленную колонку с пятью категориями: ОПТ, ЭКОММЕРЦ, РОЗНИЧНАЯ, КРЕДИТЫ, БОНДИССУЕР.Моя проблема в том, что высокоточный навигатор отображает данные неправильно.Я думаю, что мне нужно настроить свойство в селекторе диапазона или навигаторе, но я не могу найти какую-либо документацию онлайн.Я попытался inputDateParser, но это не сработало.Вот jsfiddle

inputDateParser: function (value) {
        value = value.split(/[:\.]/);
        return Date.UTC(
            1970,
            0,
            1,
            parseInt(value[0], 10),
            parseInt(value[1], 10),
            parseInt(value[2], 10),
            parseInt(value[3], 10)
        );
    }

Как получить правильный диапазон данных: октябрь месяц 2018 в соответствии с датами в CSV?Я не должен видеть целый год в навигаторе, когда у меня есть только данные за октябрь.Большое спасибо

1 Ответ

0 голосов
/ 21 ноября 2018

Вам необходимо правильно отформатировать даты, это можно сделать с помощью функции обратного вызова beforeParse, например:

data: {
  csv: document.getElementById('csv').innerHTML,
  beforeParse: function(e) {
    let csv = e.split('\n'); //split by newline
    let processedTable = []
    processedTable.push(csv[0].split(','))
    for (let i = 1; i < csv.length; i++) {
      let row = csv[i].split(',');
      if (row.length != 6) //skip empty rows or rows with more/less columns
        continue;
      let date = row[0].split(' ')[0].split('/')
      let time = row[0].split(' ')[1].split(':')

      processedTable.push(
        [(new Date(date[2], date[1] - 1, date[0], time[0], time[1], 0)).getTime(), //get the timestamp for the date 
          parseInt(row[1]),
          parseInt(row[2]),
          parseInt(row[3]),
          parseInt(row[4]),
          parseInt(row[5])
        ].join(',')
      )
    }
    return processedTable.join('\n') //join the array into a string again
  },
},

Каждая строка разбирается, разбивая ее на части, найдя датуи миллисекунды с 1970 года возвращается getTime().Затем мы объединяем ячейки в строки и, наконец, строки в длинную строку.Причина, по которой мы конвертируем это обратно в строку, заключается в том, что highcharts будет читать его из строки.

Пример работы JSFiddle: https://jsfiddle.net/ewolden/spmtgv3a/

API on beforeParse: https://api.highcharts.com/highcharts/data.beforeParse

...