js заполнить пропуски в объекте с датами
Делаю расширение для vscode, которое будет собирать статистику продуктивности. Вот: Productivity-checker Мне нужно собирать статистику за месяц. Например: пользователь открыл файл server.php. В объект files добавился новый ключ - server.php А в объект server.php записались данные за сегодня(обновляются каждую секунду)
files['server.php'][getCurrentDate()] = {workTime: 0...}
Через 2 дня пользователь снова зашел в этот файл, добавилась еще одна дата в объект
Но чтобы составить статистику за месяц, нужны данные за месяц, а здесь только за 2 дня и не подряд.
Нужно написать функцию, которая заполняла объект датами (типа '12/01/2020' : {some data}) так, чтобы в объекте было всегда 30 дат, то есть статистика ровно за месяц. Чтобы функция учитывала пробелы в датах (например, есть данные за 25 число и за 27. Нужно заполнить объект 27ю датами до 25 числа и датой 12/26/2020)
Данные такого вида
"server.php": {
"12/25/2020": {
"workTime": 453,
"freeTime": 10,
"date": 0,
"keyCount": 0,
"language": "php",
},
"12/27/2020": {
"workTime": 4593,
"freeTime": 54,
"date": 0,
"keyCount": 0,
"language": "php",
}
}
Ответы (1 шт):
function getFileData(project, filename) {
labelsData = [];
viewData = {
workTime: [],
freeTime: [],
totalTime: [],
keyCount: [],
cash: []
};
// pull chart data
for (let day = 0; day < 30; day++) {
// get current date as string
let date_str = new Date(getCurrentDate());
// get dates for month as string
let date = getCurrentDate(new Date(date_str.setDate(date_str.getDate() - day)));
let currentFile = filesData[project][filename][date];
// data is not defined - set empty data
if (!currentFile) {
viewData['workTime'].push(0);
viewData['freeTime'].push(0);
viewData['totalTime'].push(0);
viewData['keyCount'].push(0);
viewData['cash'].push(0);
} else {
viewData['workTime'].push(currentFile.workTime);
viewData['freeTime'].push(currentFile.freeTime);
viewData['totalTime'].push(currentFile.freeTime + currentFile.workTime);
viewData['keyCount'].push(currentFile.keyCount);
let cash = 0;
viewData['cash'].push(cash);
}
// add date to labels
labelsData.push(date);
}
}