JSFiddle - React, Tailwind, and code Playground
JavaScript
// נתונים גולמיים (מקוצר לצורך הדגמה)
const rawData = `
1 1 1 baruch fridm 1 3 02/09/2024 20:32
2 1 1 baruch fridm 1 3 02/09/2024 21:52
3 1 2 baruch meizl 1 0 03/09/2024 01:51
4 1 3 aron einorn 1 0 03/09/2024 01:53
5 1 4 shimon yakob 1 0 03/09/2024 01:59
120 1 1 baruch fridm 2 3 17/09/2024 21:04
`;
// פונקציה להמרת תאריך ושעה לאובייקט Date
function parseDateTime(dateTimeStr) {
const [datePart, timePart] = dateTimeStr.split(' ');
const [day, month, year] = datePart.split('/');
const [hour, minute] = timePart.split(':');
return new Date(year, month - 1, day, hour, minute);
}
// פונקציה לחישוב שעות לימוד
function calculateStudyHours(attendanceData) {
const studyHours = {};
attendanceData.forEach(record => {
const name = record.name.trim();
const dateTime = parseDateTime(record.dateTime);
const date = dateTime.toDateString();
if (!studyHours[name]) {
studyHours[name] = { totalHours: 0, onTimeCount: 0, totalDays: 0, dates: {} };
}
if (!studyHours[name].dates[date]) {
studyHours[name].dates[date] = { startTime: dateTime, endTime: dateTime, duration: 0 };
studyHours[name].totalDays++;
// בדיקה אם הגיע לפני 20:45
if (dateTime.getHours() < 20 || (dateTime.getHours() === 20 && dateTime.getMinutes() <= 45)) {
studyHours[name].onTimeCount++;
}
} else {
studyHours[name].dates[date].endTime = dateTime;
}
});
// חישוב סך שעות לימוד
Object.keys(studyHours).forEach(name => {
Object.values(studyHours[name].dates).forEach(day => {
let duration = (day.endTime - day.startTime) / (1000 * 60 * 60); // המרה לשעות
// הורדת רבע שעה אם הגיע בין 21:30 ל-21:45
const startHour = day.startTime.getHours();
const startMinute = day.startTime.getMinutes();
if (startHour === 21 && startMinute >= 30 && startMinute <= 45) {
duration -= 0.25;
}
studyHours[name].totalHours += duration;
});
});
return...