Я построил диаграмму, в которой общее количество часов пользователя для конкретного проекта рассчитывается для заданного диапазона дат.Я не знаю, как настроить логику вычисления общего значения для определенного бара, то есть: ось Y, чьи max и min автоматически рассчитываются для данного набора данных, не отображает время должным образом, потому что я не использовал тип времени для оси Y.Причина, по которой я не использовал формат времени, заключается в том, что ось Y представляет общее время, которое может быть более 24 часов, и с данными наборов данных не связано никакой даты, присутствует только время.
У меня естьЯ уже пытался использовать формат времени для оси Y, но для него требуется момент (), и я не могу использовать момент, потому что у меня есть только значение времени в формате ЧЧ: мм, а не дата.Таким образом, значение данных наборов данных не содержит никакого значения с десятичным числом больше 0,59, которое рассчитывается на стороне рельсов.
var dates = setStackedChartDates();
var myStackChart = new Chart(stackChart, {
type: 'bar',
data: {
labels: dates,
datasets: setStackedDataSet()
},
options: {
animation: {
duration: 10,
},
scales: {
xAxes: [{
stacked: true,
gridLines: { display: false },
ticks: {
autoSkip: false,
callback: function(value) {
if (gon.chart_project_group == "Date") {
return String(moment(value[0]).format("YYYY-MM-DD"));
} else if (gon.chart_project_group == "Week") {
return String(moment(value[0]).format("DD MMM, YYYY")) + " " + String(moment(value[1]).format("DD MMM, YYYY"));
} else if (gon.chart_project_group == "Month") {
return String(moment(value[0]).format("MMM, YYYY"));
} else {
return String(moment(value[0]).year());
}
}
}
}],
yAxes: [{
scaleLabel: {
display: true,
labelString: 'Time (HH:mm)'
},
stacked: true,
ticks: {
callback: function(value) {
return value.toString().replace('.', '') + ":00";
}
}
}],
},
legend: {display: true},
tooltips: {
filter: function(tooltipItem) {
return tooltipItem['yLabel'] != 0;
},
callbacks: {
label: function(tooltipItem, data){
return data['datasets'][tooltipItem['datasetIndex']]['label'] + ": " + String(tooltipItem['yLabel']).replace('.', ':');
}
}
}
}
});
function setStackedDataSet(){
var dataSetArray = [];
gon.chart_project_users.forEach(buildDataSet);
function buildDataSet(value, index, array){
var dataSetHashForEachName = {};
dataSetHashForEachName["label"] = value;
dataSetHashForEachName["data"] = setDataForEachUser(index);
dataSetHashForEachName["backgroundColor"] = gon.chart_project_user_background_color[index];
dataSetHashForEachName["borderWidth"] = 2;
dataSetArray.push(dataSetHashForEachName);
}
return dataSetArray;
}
function setDataForEachUser(indexUser){
var userData = [];
gon.chart_project_times.slice(0, setStackedChartDates().length).forEach(buildData);
function buildData(value, index, array){
userData.push(parseFloat(value[indexUser].replace(':', '.')));
}
return userData;
}
Предположим, что конкретный столбец диаграммы с накоплением содержит два данных 5,31 и 6,32, а затем ожидаемый результат12.03, но в настоящее время он обрабатывается как нормальное десятичное число, а на выходе получается 11.63.Так что это не правильно отображается на оси у.Я хочу изменить общее значение, прежде чем диаграмма js будет использовать это значение для построения диаграммы, т.е. для приведенного выше примера я хочу преобразовать 11.63 в 12.03, прежде чем диаграмма js будет использовать это значение