Использование времени в качестве координаты на графиках 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;
});