我正在尝试使用chartjs绘制折线图,以显示JSON文件中的日期,并且它必须具有以下特征:
我已经获得了图表,以显示或多或少的总次数和首次遇到的次数,但是日期范围越高,数据越稀疏,这是因为JSON文件中的日期通常介于16个日期值之间。我的主要问题是,如何确保将这些介于中间的碰撞添加到它们在X轴上最接近的匹配?到目前为止,这基本上是我想出的,但是没有用:
创建X轴的函数:
function calcLabels() {
timeAxis = [];
timeAxisDates = [];
if (!isYearView) {
numberOfGraphValues = 16;
switch (tabDays) {
case 30:
timeInterval = 2;
break;
case 60:
timeInterval = 4;
break;
case 90:
timeInterval = 6;
}
let dateForArray = new Date();
for (let i = 1; i < numberOfGraphValues; i++) { //Find 16 dates spread across the number of months
timeAxisDates.push(new Date(dateForArray));
let theDate = dateForArray.getDate();
if (theDate === 1 || theDate <= timeInterval || i === (numberOfGraphValues-1)) {
theDate = nameMonth(dateForArray.getMonth()) + ' ' + theDate; //Add the month name if it's the 1st or 2nd day of it
}
dateForArray.setDate(dateForArray.getDate() - timeInterval);
timeAxis.push(theDate)
}
timeAxisDates.reverse();
timeAxis.reverse();
} else { //Is YTD
numberOfGraphValues = 12;
timeAxis = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
timeAxisDates = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
}
}
应该找出所有相遇并将其分配给日期的有问题的代码:
function countEncounters() {
resetPatients();
let patientData = JSON.parse(sessionStorage.getItem('patient_data'));
let index = 0;
for (let patient in patientData) {
if (patient === '00000000') continue;
//Find the encounter
let isNewPatient = true;
for (let encounter in patientData[patient].patientEncounters) {
let formattedDate = formatDate(patientData[patient].patientEncounters[encounter].encounterDate); //This function simply changes the date form from a JSON string, e.g. "20181012" to a date object
formattedDate.setHours(0, 0, 0, 0);
patientEncounters[index] = {"date": formattedDate};
if (isNewPatient) firstPatientEncounter[index] = {"date": formattedDate};
isNewPatient = false;
index++;
}
}
//Find the date on the axis in the graph
if (!isYearView) {
for (let i = 0; i < timeAxis.length; i++) {
for (let date in patientEncounters) {
let dayAfter = [];
for (let j=0; j<timeInterval; j++){
dayAfter.push(timeAxisDates[i].getDate() + j)
}
// dayAfter.setDate(timeAxisDates[i].getDate() + 1);
if (patientEncounters[date].date.getMonth() === timeAxisDates[i].getMonth()) { //compare months and days
if (patientEncounters[date].date.getDate() === timeAxisDates[i].getDate() || checkRange(patientEncounters[date].date.getDate(), dayAfter)) {
totalPatients[i]++
}
}
if (firstPatientEncounter[date] != null) {
if (firstPatientEncounter[date].date.getMonth() === timeAxisDates[i].getMonth() ) { //compare months and days
if (firstPatientEncounter[date].date.getDate() === timeAxisDates[i].getDate() || checkRange(patientEncounters[date].date.getDate(), dayAfter)) {
newPatients[i]++
}
}
}
}
}
} else { //YTD
for (let i = 0; i < 12; i++) {
for (let date in patientEncounters) {
if (patientEncounters[date].date.getMonth() === timeAxisDates[i + 1]) {
if (lastYear) {
if (patientEncounters[date].date.getFullYear() === (year - 1)) {
totalPatients[timeAxisDates[i]]++
}
} else {
totalPatients[timeAxisDates[i]]++
}
if (firstPatientEncounter[date] != null) {
if (firstPatientEncounter[date].date.getMonth() === timeAxisDates[i + 1]) {
if (lastYear) {
if (firstPatientEncounter[date].date.getFullYear() === (year - 1)) {
newPatients[timeAxisDates[i + 1]]++
}
} else {
newPatients[timeAxisDates[i]]++
}
}
}
}
}
}
}
}
function checkRange(date, array){
for (let i=0; i<array; i++){
if (date === array[i]) return true
}
return false
}
我还没有完成“年初至今”,但是它也有bug,因此,任何有关如何进行此工作的提示也将不胜感激。不过,在“天”视图中找出我做错的事情可能已经可以解决。