Использование времени в качестве координаты на графиках nvD3

Я пытаюсь нанести массив значений на линейный график. Каждое значение имеет отметку даты / времени. Итак, пример данных:

aPoint = { 'label': 201401082015, //so this corresponds to 2014, Jan 08th, at 10:15PM
          'data' : 1234
         };

Как мне конвертировать label в форму, которую nvd3 может распознать как дату / время? Не меняя форму labelпроизойдет неправильное расстояние между точками данных (из-за 60 минут за 1 час, 24 часа за 1 день, а не 100).

Чтобы уточнить, если событие происходит в 23:00 часы (11 вечера), а другой в 01:00 час (1:00) на следующий день, тогда на самом деле эти события разнесены на 2 часа. Неправильно, однако, они будут построены так, как если бы они были на расстоянии 78 часов (101-23=78) друг от друга из-за нехватки часов в день base 10,

Как мне конвертировать label в форму, которую nvd3 может распознать как дату / время?

1 ответ

Решение

Как мне преобразовать метку в форму, которую nvd3 может распознать как дату / время?

Как это:

function labelToMs(label){
  var parts = label.toString().match(/^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})$/);
  var partsToInt = parts.slice(0,5).map(function(s){return parseInt(s)});
  var date = new Date(partsToInt[0], partsToInt[1]-1, partsToInt[2], partsToInt[3], partsToInt[4]);
  return date.getTime();
}

Эта функция вернет число, которое не будет иметь этой проблемы, потому что это будет количество миллисекунд с 1 января 1970 года 00:00:00 UTC.

Кроме того, если у вас есть Массив точек, и вы хотите преобразовать его в Массив с меткой в ​​виде числа MS, вы можете сделать это следующим образом:

var yourArrayOfPoints = yourArrayOfPoints.map(function(point){ 
  point.label = labelToMs(point.label);
  return point;
});
Другие вопросы по тегам